Bird
Raised Fist0
Redisquery~3 mins

Why EVALSHA for cached scripts in Redis? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if you could speed up your Redis scripts by never sending the full code again?

The Scenario

Imagine you have a busy coffee shop where every order requires writing down the recipe from scratch each time. This slows down the baristas and causes mistakes.

The Problem

Writing the same script repeatedly is slow and error-prone. Each time you send the full script, it wastes time and bandwidth, and you risk typos or inconsistencies.

The Solution

EVALSHA lets you store the script once and then call it by its unique ID (hash). This means faster execution, less data sent, and fewer errors.

Before vs After
✗ Before
EVAL "return redis.call('GET', KEYS[1])" 1 mykey
✓ After
EVALSHA <sha1-hash> 1 mykey
What It Enables

You can run complex Redis scripts quickly and reliably by referencing cached versions instead of resending full scripts.

Real Life Example

A gaming app uses EVALSHA to quickly update player scores with a stored script, reducing lag and improving user experience.

Key Takeaways

Manually sending scripts wastes time and risks errors.

EVALSHA caches scripts by hash for fast, reliable calls.

This improves performance and reduces network load.

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