Bird
Raised Fist0
Redisquery~5 mins

EVALSHA for cached scripts in Redis - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the Redis command EVALSHA do?

EVALSHA runs a Lua script that is already cached in Redis using its SHA1 hash. It avoids sending the full script again.

Click to reveal answer
beginner
Why use EVALSHA instead of EVAL in Redis?

EVALSHA is faster because it runs a cached script by its hash, so you don't resend the whole script text every time.

Click to reveal answer
intermediate
What happens if you run EVALSHA with a SHA1 hash that Redis does not recognize?

Redis returns an error saying the script is not found. You must load the script first with SCRIPT LOAD or use EVAL to run it.

Click to reveal answer
beginner
How do you get the SHA1 hash of a Lua script to use with EVALSHA?

Use the Redis command SCRIPT LOAD <script>. It returns the SHA1 hash of the script.

Click to reveal answer
intermediate
What are the arguments passed to EVALSHA after the SHA1 hash?

First, the number of keys the script will access, then the keys themselves, followed by any additional arguments the script needs.

Click to reveal answer
What does EVALSHA require to run a script?
AThe SHA1 hash of a cached script
BThe full Lua script text
CThe script filename
DThe script execution time
If EVALSHA returns a 'NOSCRIPT' error, what should you do?
AUse <code>SCRIPT LOAD</code> to load the script or run <code>EVAL</code> first
BChange the script name
CRestart Redis server
DIncrease Redis memory
Which command returns the SHA1 hash of a Lua script in Redis?
ASCRIPT HASH
BSCRIPT LOAD
CEVALSHA
DSCRIPT GET
What is the first argument after the SHA1 hash in EVALSHA?
ANumber of arguments
BScript timeout
CNumber of keys the script will access
DScript version
Why is EVALSHA preferred over EVAL for repeated script execution?
AIt automatically updates scripts
BIt uses less memory
CIt supports more Lua features
DIt runs scripts faster by avoiding re-sending the script text
Explain how EVALSHA works in Redis and why it is useful.
Think about caching and script reuse.
You got /4 concepts.
    Describe the steps to run a Lua script repeatedly using EVALSHA in Redis.
    Consider script loading, running, and error handling.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the Redis command EVALSHA primarily do?
      easy
      A. Uploads a new Lua script to Redis cache
      B. Deletes a script from the cache by its SHA1 hash
      C. Lists all cached scripts by their SHA1 hashes
      D. Runs a cached Lua script using its SHA1 hash

      Solution

      1. Step 1: Understand the purpose of EVALSHA

        EVALSHA runs a Lua script already stored in Redis cache using its SHA1 hash instead of sending the full script text.
      2. Step 2: Compare with other script commands

        Other commands like SCRIPT LOAD upload scripts, SCRIPT FLUSH deletes scripts, but EVALSHA executes cached scripts.
      3. Final Answer:

        Runs a cached Lua script using its SHA1 hash -> Option D
      4. Quick Check:

        EVALSHA = run cached script [OK]
      Hint: EVALSHA runs scripts by hash, not by full text [OK]
      Common Mistakes:
      • Confusing EVALSHA with SCRIPT LOAD
      • Thinking EVALSHA deletes scripts
      • Assuming EVALSHA lists scripts
      2. Which of the following is the correct syntax for using EVALSHA in Redis?
      easy
      A. EVALSHA <numkeys> <sha1> [key1 key2 ...] [arg1 arg2 ...]
      B. EVALSHA <sha1> <numkeys> [key1 key2 ...] [arg1 arg2 ...]
      C. EVALSHA <sha1> [key1 key2 ...] <numkeys> [arg1 arg2 ...]
      D. EVALSHA <script> <numkeys> [key1 key2 ...] [arg1 arg2 ...]

      Solution

      1. Step 1: Recall EVALSHA syntax

        The correct syntax is: EVALSHA followed by the SHA1 hash, then the number of keys, then the keys, then the arguments.
      2. Step 2: Check option formats

        EVALSHA <sha1> <numkeys> [key1 key2 ...] [arg1 arg2 ...] matches the correct order. Options A, B, and C have wrong order or use script text instead of SHA1.
      3. Final Answer:

        EVALSHA <sha1> <numkeys> [key1 key2 ...] [arg1 arg2 ...] -> Option B
      4. Quick Check:

        Syntax = EVALSHA sha1 numkeys keys args [OK]
      Hint: SHA1 hash comes first, then number of keys [OK]
      Common Mistakes:
      • Putting script text instead of SHA1 hash
      • Mixing order of numkeys and keys
      • Omitting number of keys
      3. Given the following Redis commands executed in order:
      127.0.0.1:6379> SCRIPT LOAD "return {KEYS[1],ARGV[1]}"
      "a1b2c3d4e5f6g7h8i9j0"
      127.0.0.1:6379> EVALSHA a1b2c3d4e5f6g7h8i9j0 1 mykey myarg

      What will be the output of the EVALSHA command?
      medium
      A. ["mykey", "myarg"]
      B. ["myarg", "mykey"]
      C. Error: NOSCRIPT No matching script
      D. ["a1b2c3d4e5f6g7h8i9j0", "myarg"]

      Solution

      1. Step 1: Understand SCRIPT LOAD output

        SCRIPT LOAD returns the SHA1 hash of the script, here "a1b2c3d4e5f6g7h8i9j0".
      2. Step 2: Analyze EVALSHA call

        EVALSHA runs the cached script with 1 key: "mykey" and 1 argument: "myarg". The script returns {KEYS[1], ARGV[1]} so output is ["mykey", "myarg"].
      3. Final Answer:

        ["mykey", "myarg"] -> Option A
      4. Quick Check:

        Return keys[1], argv[1] = [mykey, myarg] [OK]
      Hint: SCRIPT LOAD returns SHA1; EVALSHA uses keys then args [OK]
      Common Mistakes:
      • Confusing keys and args order
      • Expecting error without loading script
      • Using script text instead of SHA1
      4. You run the command EVALSHA deadbeef 2 key1 key2 arg1 but get the error NOSCRIPT No matching script. What is the most likely cause?
      medium
      A. The number of keys argument should be 1, not 2
      B. You provided too many keys for the script
      C. The SHA1 hash 'deadbeef' is not loaded in Redis script cache
      D. The script syntax is invalid

      Solution

      1. Step 1: Understand NOSCRIPT error meaning

        This error means Redis does not have a cached script matching the given SHA1 hash.
      2. Step 2: Check command usage

        Since the hash 'deadbeef' is not loaded, Redis cannot run the script. Number of keys or syntax errors cause different errors.
      3. Final Answer:

        The SHA1 hash 'deadbeef' is not loaded in Redis script cache -> Option C
      4. Quick Check:

        NOSCRIPT = missing cached script [OK]
      Hint: NOSCRIPT means script hash not cached yet [OK]
      Common Mistakes:
      • Assuming wrong number of keys causes NOSCRIPT
      • Thinking syntax error causes NOSCRIPT
      • Ignoring that script must be loaded first
      5. You want to optimize a Redis Lua script execution by caching it. Which sequence correctly uses SCRIPT LOAD and EVALSHA to run the script multiple times with different keys and arguments?
      hard
      A. Load script once with SCRIPT LOAD, save SHA1, then call EVALSHA with SHA1, numkeys, keys, args each time
      B. Call EVALSHA with script text each time, no need to load script
      C. Use SCRIPT FLUSH before every EVALSHA to clear cache
      D. Call EVALSHA with SHA1 but always set numkeys to 0

      Solution

      1. Step 1: Understand caching workflow

        First, SCRIPT LOAD uploads the script and returns its SHA1 hash. This hash is saved for reuse.
      2. Step 2: Use EVALSHA for repeated execution

        Use EVALSHA with the saved SHA1, specifying number of keys, keys, and arguments to run the script efficiently multiple times.
      3. Final Answer:

        Load script once with SCRIPT LOAD, save SHA1, then call EVALSHA with SHA1, numkeys, keys, args each time -> Option A
      4. Quick Check:

        Load once, run many times with EVALSHA [OK]
      Hint: Load script once, then run with EVALSHA and SHA1 [OK]
      Common Mistakes:
      • Calling EVALSHA with script text instead of SHA1
      • Flushing scripts before every run
      • Setting numkeys incorrectly
      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