📖 Scenario: You are building a simple caching system for a product catalog using Redis. The goal is to keep the cache and the database synchronized so that when a product's price is updated, both the cache and the database reflect the change immediately.
🎯 Goal: Build a write-through cache pattern where updates to product prices are written to both Redis cache and the database at the same time.
📋 What You'll Learn
Create a Redis hash to store product prices with exact keys and values
Define a variable for the database simulation with the same product data
Write a function to update the product price in both Redis and the database
Ensure the final code updates both data stores correctly
💡 Why This Matters
🌍 Real World
Write-through caching is used in web applications to keep cache and database synchronized, improving performance and data consistency.
💼 Career
Understanding write-through patterns is important for backend developers and database administrators working with caching systems and data synchronization.
Progress0 / 4 steps
1
Create Redis hash with product prices
Create a Redis hash called product_prices with these exact entries: product1: 100, product2: 200, product3: 300.
Redis
Hint
Use the HMSET command to create a hash with multiple fields and values.
2
Simulate database with a dictionary
Create a variable called database as a dictionary with these exact entries: 'product1': 100, 'product2': 200, 'product3': 300.
Redis
Hint
Use Python dictionary syntax to create the database variable.
3
Write update function for write-through
Write a function called update_price that takes product and new_price as parameters and updates the price in both the Redis hash product_prices and the database dictionary.
Redis
Hint
Use the HSET command to update Redis and assign the new price in the dictionary.
4
Complete write-through update with Redis command execution
Add a line inside update_price to execute the Redis command string stored in redis_command using a Redis client method called execute_command.
Redis
Hint
Call redis_client.execute_command(redis_command) to send the update to Redis.
Practice
(1/5)
1. What is the main purpose of the write-through pattern in Redis caching?
easy
A. To delete data from the cache when the database is updated
B. To update only the cache and delay database writes
C. To read data only from the cache without updating the database
D. To update both the cache and the database at the same time
Solution
Step 1: Understand write-through pattern basics
The write-through pattern means writing data to the cache and database simultaneously to keep them in sync.
Step 2: Identify the correct behavior in Redis context
In Redis, this pattern ensures cache is updated immediately when the database changes, avoiding stale data.
Final Answer:
To update both the cache and the database at the same time -> Option D
Quick Check:
Write-through = update cache + database [OK]
Hint: Write-through updates cache and DB together [OK]
Common Mistakes:
Thinking write-through updates only cache
Confusing write-through with write-back pattern
Assuming cache is updated after database asynchronously
2. Which Redis command sequence correctly implements a write-through cache update when saving a user profile with key user:123 and value {"name":"Alice"}?
easy
A. DEL user:123 then SET user:123 '{"name":"Alice"}'
B. GET user:123 then SET user:123 '{"name":"Alice"}'
C. SET user:123 '{"name":"Alice"}' followed by DB update
D. SET user:123 '{"name":"Alice"}' only, no DB update
Solution
Step 1: Identify write-through steps
Write-through requires writing to cache (Redis) and database together.
Step 2: Match Redis commands to write-through
Using SET updates Redis cache; followed by DB update ensures both are in sync.
Final Answer:
SET user:123 '{"name":"Alice"}' followed by DB update -> Option C
Quick Check:
SET + DB update = write-through [OK]
Hint: SET cache then update DB for write-through [OK]
Common Mistakes:
Only updating cache without DB
Deleting cache before setting without DB update
Getting cache before setting without DB write
3. Consider this pseudo-code using write-through pattern:
cache.SET('item:1', 'value1')
database.UPDATE('item:1', 'value1')
result = cache.GET('item:1')
What will result contain after execution?
medium
A. null
B. 'value1'
C. Old cached value
D. Error due to missing database read
Solution
Step 1: Analyze cache write
The cache is set to 'value1' for key 'item:1' before database update.
Step 2: Analyze cache read
Reading from cache immediately after setting returns the new value 'value1'.
Final Answer:
'value1' -> Option B
Quick Check:
Cache GET after SET returns new value [OK]
Hint: GET after SET returns updated cache value [OK]
Common Mistakes:
Assuming cache GET returns null if DB updated
Thinking old cached value remains after SET
Expecting error without explicit DB read
4. You implemented write-through caching but notice stale data in Redis after database updates. Which mistake likely causes this?
medium
A. Updating database but forgetting to update Redis cache
B. Updating Redis cache but not the database
C. Using GET instead of SET to update cache
D. Deleting database entries without clearing cache
Solution
Step 1: Identify cause of stale cache
If database updates but cache is not updated, cache holds old data causing staleness.
Step 2: Match mistake to write-through pattern
Write-through requires cache update on every DB write; missing cache update breaks this.
Final Answer:
Updating database but forgetting to update Redis cache -> Option A
Quick Check:
Missing cache update causes stale data [OK]
Hint: Always update cache when DB changes [OK]
Common Mistakes:
Updating cache only without DB
Using GET to update cache instead of SET
Not clearing cache on DB deletes
5. You want to implement a write-through cache in Redis for a product catalog. Which approach best ensures data consistency and minimal stale reads?
hard
A. On product update, update both Redis cache and database synchronously in the same operation
B. On product update, update the database first, then delete the Redis cache entry
C. On product update, update only the database and rely on cache expiration to refresh
D. On product update, write to Redis cache first, then update the database asynchronously