The WATCH command monitors one or more keys for changes. If any watched key changes before the transaction executes, the transaction is aborted to avoid conflicts.
Click to reveal answer
intermediate
Explain optimistic locking in Redis using WATCH.
Optimistic locking assumes no conflicts will happen. Redis uses WATCH to monitor keys. If keys change before EXEC, the transaction fails, so you can retry safely.
Click to reveal answer
beginner
What happens if a watched key is modified before EXEC in Redis?
The transaction is aborted and EXEC returns null. This prevents conflicting updates and ensures data consistency.
Click to reveal answer
intermediate
How do you retry a transaction after a WATCH aborts in Redis?
You can retry by re-watching the keys and re-executing the transaction commands in a loop until EXEC succeeds.
Click to reveal answer
advanced
Why is WATCH considered optimistic locking instead of pessimistic locking?
Because it does not lock keys upfront. It only checks for changes at commit time, assuming conflicts are rare and handling them if they occur.
Click to reveal answer
What does Redis do if a key watched by WATCH changes before EXEC?
AAutomatically retries the transaction
BLocks the key until transaction finishes
CIgnores the change and commits anyway
DAborts the transaction and returns null
✗ Incorrect
If a watched key changes, Redis aborts the transaction to avoid conflicts and returns null.
Which Redis command is used to start monitoring keys for optimistic locking?
AEXEC
BWATCH
CMULTI
DDISCARD
✗ Incorrect
WATCH is used to monitor keys for changes before running a transaction.
What is the purpose of optimistic locking in Redis?
ATo detect conflicts only at commit time
BTo lock keys before any changes
CTo prevent any concurrent access
DTo automatically merge conflicting changes
✗ Incorrect
Optimistic locking assumes no conflicts and checks for them only when committing.
Which command executes all commands in a Redis transaction after WATCH?
AEXEC
BMULTI
CWATCH
DDISCARD
✗ Incorrect
EXEC runs all queued commands in the transaction if no watched keys changed.
If a Redis transaction fails due to WATCH, what should you do next?
AUse <code>DISCARD</code> to force commit
BIgnore and continue without retry
CRetry the transaction after re-watching keys
DDelete the keys and try again
✗ Incorrect
You should retry by watching keys again and re-executing the transaction.
Describe how Redis uses the WATCH command to implement optimistic locking.
Think about how Redis checks for conflicts only at commit time.
You got /4 concepts.
Explain the difference between optimistic locking with WATCH and pessimistic locking.
Focus on when locking happens and how conflicts are handled.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of the WATCH command in Redis optimistic locking?
easy
A. To monitor keys for changes before executing a transaction
B. To lock keys permanently for exclusive access
C. To delete keys automatically after a timeout
D. To create backups of keys before modification
Solution
Step 1: Understand the role of WATCH in Redis
WATCH is used to monitor keys for any changes before a transaction starts.
Step 2: Identify what happens if keys change
If any watched key changes before EXEC, the transaction is canceled to avoid conflicts.
Final Answer:
To monitor keys for changes before executing a transaction -> Option A
Quick Check:
WATCH detects key changes before transaction [OK]
Hint: WATCH checks keys before transaction to avoid conflicts [OK]
Common Mistakes:
Thinking WATCH locks keys permanently
Assuming WATCH deletes keys
Believing WATCH creates backups
2. Which of the following is the correct sequence of Redis commands to safely update a key counter using optimistic locking?
easy
A. MULTI, WATCH counter, INCR counter, EXEC
B. WATCH counter, MULTI, INCR counter, EXEC
C. WATCH counter, INCR counter, MULTI, EXEC
D. INCR counter, WATCH counter, MULTI, EXEC
Solution
Step 1: Identify correct order for optimistic locking
You must first WATCH the key to monitor changes, then start MULTI for transaction.
Step 2: Confirm command order
The correct order is WATCH counter, then MULTI, then commands like INCR, finally EXEC.
Final Answer:
WATCH counter, MULTI, INCR counter, EXEC -> Option B
Quick Check:
WATCH before MULTI for optimistic locking [OK]
Hint: Always WATCH before MULTI to start transaction safely [OK]
Common Mistakes:
Starting MULTI before WATCH
Running commands before MULTI
Not using EXEC at the end
3. Consider this Redis transaction sequence:
WATCH balance
MULTI
INCR balance
EXEC
If another client modifies balance after WATCH but before EXEC, what will be the result of EXEC?
medium
A. EXEC will fail and return null
B. EXEC will succeed and increment balance
C. EXEC will throw a syntax error
D. EXEC will retry automatically
Solution
Step 1: Understand WATCH behavior on key change
If a watched key changes before EXEC, the transaction is aborted to prevent conflicts.
Step 2: Identify EXEC result when aborting
When aborted, EXEC returns null (or nil) indicating the transaction did not run.
Final Answer:
EXEC will fail and return null -> Option A
Quick Check:
Key changed after WATCH causes EXEC to return null [OK]
Hint: If watched key changes, EXEC returns null, no update done [OK]
Common Mistakes:
Assuming EXEC still increments key
Expecting syntax error on EXEC
Thinking EXEC retries automatically
4. You wrote this Redis code:
WATCH stock
MULTI
DECR stock
EXEC
But sometimes the stock count is not decremented even though no errors occur. What is the most likely cause?
medium
A. EXEC command was missing
B. The DECR command syntax is incorrect
C. The stock key was modified by another client after WATCH
D. WATCH does not support DECR command
Solution
Step 1: Analyze why stock is not decremented
If another client changes the watched key after WATCH, EXEC aborts the transaction silently.
Step 2: Confirm command correctness
DECR syntax is correct and EXEC is present, so no syntax errors.
Final Answer:
The stock key was modified by another client after WATCH -> Option C
Hint: Concurrent changes abort EXEC silently, no decrement done [OK]
Common Mistakes:
Blaming DECR syntax
Forgetting EXEC command
Thinking WATCH blocks commands
5. You want to safely increment a shared counter only if it is less than 10 using Redis optimistic locking. Which code snippet correctly implements this logic?
hard
A. WATCH counter
if val < 10:
val = GET counter
MULTI
INCR counter
EXEC
B. MULTI
WATCH counter
val = GET counter
if val < 10:
INCR counter
EXEC
C. WATCH counter
MULTI
val = GET counter
if val < 10:
INCR counter
EXEC
D. WATCH counter
val = GET counter
MULTI
if val < 10:
INCR counter
EXEC
Solution
Step 1: Understand optimistic locking with conditional logic
You must WATCH the key, then GET its value before starting MULTI to ensure value is current.
Step 2: Confirm correct command order
WATCH first, then GET value, then MULTI, then conditionally INCR, finally EXEC.
Final Answer:
WATCH counter
val = GET counter
MULTI
if val < 10:
INCR counter
EXEC -> Option D
Quick Check:
GET before MULTI after WATCH ensures correct conditional update [OK]
Hint: GET value after WATCH but before MULTI for safe conditional update [OK]
Common Mistakes:
Starting MULTI before GET
Getting value after MULTI
Not watching key before GET
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.