Bird
Raised Fist0
Redisquery~20 mins

EVAL command for Lua execution in Redis - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Lua EVAL Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
1:30remaining
Output of a simple Lua script with EVAL
What is the output of this Redis EVAL command?

EVAL "return ARGV[1] .. ARGV[2]" 0 Hello World
Redis
EVAL "return ARGV[1] .. ARGV[2]" 0 Hello World
A"Hello World"
B"ARGV[1]ARGV[2]"
CError: wrong number of arguments
D"HelloWorld"
Attempts:
2 left
💡 Hint
Remember that ARGV is a list of arguments passed after the key count, and concatenation in Lua uses .. operator.
📝 Syntax
intermediate
1:30remaining
Identify the syntax error in Lua script for EVAL
Which option contains a syntax error when used as the Lua script in Redis EVAL?
Areturn redis.call('incr', KEYS[1])
Breturn redis.call('get', KEYS[1])
Creturn redis.call('set', KEYS[1], ARGV[1])
Dreturn redis.call('del', KEYS[1])
Attempts:
2 left
💡 Hint
Check for missing or mismatched parentheses in the Lua code.
❓ optimization
advanced
2:00remaining
Optimizing Lua script to increment multiple keys
You want to increment the values of multiple keys atomically using EVAL. Which Lua script is the most efficient?
Afor i=1,#KEYS do redis.call('incr', KEYS[i]) end return 'OK'
Bredis.call('incr', KEYS[1]) redis.call('incr', KEYS[2]) return 'OK'
Creturn redis.call('incr', KEYS[1]) + redis.call('incr', KEYS[2])
Dfor i=1,#ARGV do redis.call('incr', ARGV[i]) end return 'OK'
Attempts:
2 left
💡 Hint
Use KEYS array to loop over keys, not ARGV.
🧠 Conceptual
advanced
1:30remaining
Understanding KEYS and ARGV in EVAL
In Redis EVAL command, what is the main difference between KEYS and ARGV?
AKEYS are only used for read operations; ARGV only for write operations.
BKEYS are the keys the script will access; ARGV are additional arguments passed to the script.
CKEYS are arguments passed after ARGV; ARGV are keys to access.
DKEYS and ARGV are interchangeable and mean the same.
Attempts:
2 left
💡 Hint
Think about how Redis separates keys from other parameters for scripting.
🔧 Debug
expert
1:30remaining
Debugging a Lua script that returns nil unexpectedly
Given this EVAL command:

EVAL "return redis.call('get', KEYS[1])" 1 mykey

If the key 'mykey' does not exist, what will the script return?
Redis
EVAL "return redis.call('get', KEYS[1])" 1 mykey
A"" (empty string)
BError: key does not exist
Cnil
D0
Attempts:
2 left
💡 Hint
Consider what Redis returns when getting a non-existent key.

Practice

(1/5)
1. What is the main purpose of the EVAL command in Redis?
easy
A. To run Lua scripts inside Redis for atomic operations
B. To execute SQL queries on Redis data
C. To backup Redis data to a file
D. To create new Redis databases

Solution

  1. Step 1: Understand Redis scripting

    Redis uses Lua scripts to perform complex or multiple operations atomically.
  2. Step 2: Identify EVAL command role

    The EVAL command runs Lua scripts inside Redis, ensuring atomicity and reducing network calls.
  3. Final Answer:

    To run Lua scripts inside Redis for atomic operations -> Option A
  4. Quick Check:

    EVAL runs Lua scripts = D [OK]
Hint: EVAL runs Lua scripts atomically inside Redis [OK]
Common Mistakes:
  • Confusing EVAL with SQL execution
  • Thinking EVAL backs up data
  • Assuming EVAL creates databases
2. Which of the following is the correct syntax to run a Lua script with EVAL in Redis?
easy
A. EVAL script numkeys key [key ...] arg [arg ...]
B. EVAL numkeys script key [key ...] arg [arg ...]
C. EVAL script key numkeys arg [arg ...]
D. EVAL script arg numkeys key [key ...]

Solution

  1. Step 1: Recall EVAL syntax

    The correct syntax is EVAL script numkeys key [key ...] arg [arg ...], where numkeys tells how many keys follow.
  2. Step 2: Match options

    Only EVAL script numkeys key [key ...] arg [arg ...] matches this exact order and structure.
  3. Final Answer:

    EVAL script numkeys key [key ...] arg [arg ...] -> Option A
  4. Quick Check:

    Script, numkeys, keys, args order = A [OK]
Hint: Remember: script, numkeys, keys, then args in EVAL [OK]
Common Mistakes:
  • Placing numkeys after keys or args
  • Mixing order of keys and args
  • Omitting numkeys parameter
3. Given the Lua script return redis.call('GET', KEYS[1]) and the command EVAL script 1 mykey, what will Redis return if mykey holds the value 'hello'?
medium
A. An error because arguments are missing
B. nil
C. 'hello'
D. The string 'mykey'

Solution

  1. Step 1: Understand the Lua script

    The script calls redis.call('GET', KEYS[1]), which fetches the value of the first key passed.
  2. Step 2: Analyze the command

    The command passes 1 key: mykey. If mykey holds 'hello', the script returns 'hello'.
  3. Final Answer:

    'hello' -> Option C
  4. Quick Check:

    GET mykey = 'hello' [OK]
Hint: Lua script returns value of first key passed [OK]
Common Mistakes:
  • Confusing keys and args
  • Expecting key name instead of value
  • Assuming nil if key exists
4. What is wrong with this Redis command? EVAL 'return redis.call('GET', KEYS[1])' 1 mykey
medium
A. Missing number of keys argument
B. The Lua script string uses conflicting single quotes causing syntax error
C. Keys and args are swapped
D. The command is correct and will run successfully

Solution

  1. Step 1: Inspect Lua script quoting

    The Lua script is enclosed in single quotes, but inside it also uses single quotes for 'GET', causing quote conflict.
  2. Step 2: Identify syntax error

    This causes a syntax error because the shell or Redis cannot parse the string properly.
  3. Final Answer:

    The Lua script string uses conflicting single quotes causing syntax error -> Option B
  4. Quick Check:

    Quote conflict in script string = A [OK]
Hint: Use different quotes or escape inner quotes in Lua script [OK]
Common Mistakes:
  • Ignoring quote conflicts
  • Forgetting to escape inner quotes
  • Miscounting number of keys
5. You want to atomically increment a Redis key counter by a value passed as an argument using EVAL. Which Lua script and command correctly achieve this?
hard
A. Script: return redis.call('INCRBY', ARGV[1], KEYS[1])
Command: EVAL script 1 counter 5
B. Script: return redis.call('INCRBY', KEYS[1], ARGV[1])
Command: EVAL script 2 counter 5
C. Script: return redis.call('INCRBY', KEYS[1], ARGV[1])
Command: EVAL script 0 counter 5
D. Script: return redis.call('INCRBY', KEYS[1], ARGV[1])
Command: EVAL script 1 counter 5

Solution

  1. Step 1: Understand INCRBY usage in Lua script

    The command redis.call('INCRBY', KEYS[1], ARGV[1]) increments the key by the argument value.
  2. Step 2: Check command arguments

    Passing 1 as number of keys, then counter as key, and 5 as argument matches the script.
  3. Final Answer:

    Script: return redis.call('INCRBY', KEYS[1], ARGV[1]) and Command: EVAL script 1 counter 5 -> Option D
  4. Quick Check:

    INCRBY key arg with correct keys count = B [OK]
Hint: Keys count must match keys passed; args follow keys [OK]
Common Mistakes:
  • Swapping keys and args order
  • Incorrect number of keys argument
  • Using zero keys when keys are needed
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard