What if you could speed up your Redis scripts by never sending the full code again?
Why EVALSHA for cached scripts in Redis? - Purpose & Use Cases
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.
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.
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.
EVAL "return redis.call('GET', KEYS[1])" 1 mykey
EVALSHA <sha1-hash> 1 mykeyYou can run complex Redis scripts quickly and reliably by referencing cached versions instead of resending full scripts.
A gaming app uses EVALSHA to quickly update player scores with a stored script, reducing lag and improving user experience.
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
EVALSHA primarily do?Solution
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.Step 2: Compare with other script commands
Other commands like SCRIPT LOAD upload scripts, SCRIPT FLUSH deletes scripts, but EVALSHA executes cached scripts.Final Answer:
Runs a cached Lua script using its SHA1 hash -> Option DQuick Check:
EVALSHA = run cached script [OK]
- Confusing EVALSHA with SCRIPT LOAD
- Thinking EVALSHA deletes scripts
- Assuming EVALSHA lists scripts
EVALSHA in Redis?Solution
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.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.Final Answer:
EVALSHA <sha1> <numkeys> [key1 key2 ...] [arg1 arg2 ...] -> Option BQuick Check:
Syntax = EVALSHA sha1 numkeys keys args [OK]
- Putting script text instead of SHA1 hash
- Mixing order of numkeys and keys
- Omitting number of keys
127.0.0.1:6379> SCRIPT LOAD "return {KEYS[1],ARGV[1]}"
"a1b2c3d4e5f6g7h8i9j0"
127.0.0.1:6379> EVALSHA a1b2c3d4e5f6g7h8i9j0 1 mykey myargWhat will be the output of the
EVALSHA command?Solution
Step 1: Understand SCRIPT LOAD output
SCRIPT LOAD returns the SHA1 hash of the script, here "a1b2c3d4e5f6g7h8i9j0".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"].Final Answer:
["mykey", "myarg"] -> Option AQuick Check:
Return keys[1], argv[1] = [mykey, myarg] [OK]
- Confusing keys and args order
- Expecting error without loading script
- Using script text instead of SHA1
EVALSHA deadbeef 2 key1 key2 arg1 but get the error NOSCRIPT No matching script. What is the most likely cause?Solution
Step 1: Understand NOSCRIPT error meaning
This error means Redis does not have a cached script matching the given SHA1 hash.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.Final Answer:
The SHA1 hash 'deadbeef' is not loaded in Redis script cache -> Option CQuick Check:
NOSCRIPT = missing cached script [OK]
- Assuming wrong number of keys causes NOSCRIPT
- Thinking syntax error causes NOSCRIPT
- Ignoring that script must be loaded first
SCRIPT LOAD and EVALSHA to run the script multiple times with different keys and arguments?Solution
Step 1: Understand caching workflow
First, SCRIPT LOAD uploads the script and returns its SHA1 hash. This hash is saved for reuse.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.Final Answer:
Load script once with SCRIPT LOAD, save SHA1, then call EVALSHA with SHA1, numkeys, keys, args each time -> Option AQuick Check:
Load once, run many times with EVALSHA [OK]
- Calling EVALSHA with script text instead of SHA1
- Flushing scripts before every run
- Setting numkeys incorrectly
Ready to prove it?
Pass the test and this pattern moves unknown
