# Set a cached value with TTL (Time To Live)SET user:123 "{"name":"John","email":"john@example.com"}" EX 3600# Get cached valueGET user:123# Delete cached valueDEL user:123# Check if key existsEXISTS user:123
# Store user session (expires in 24 hours)SETEX session:abc123 86400 "{"userId":123,"role":"user"}"# Get session dataGET session:abc123# Update session expiryEXPIRE session:abc123 86400
import redisimport jsonfrom datetime import timedelta# Connect to Redisr = redis.Redis(host='localhost', port=6379, db=0)# Cache user datadef get_user(user_id): cache_key = f"user:{user_id}" # Try to get from cache first cached_user = r.get(cache_key) if cached_user: return json.loads(cached_user) # If not in cache, get from database user = fetch_user_from_database(user_id) # Cache for 1 hour r.setex(cache_key, timedelta(hours=1), json.dumps(user)) return user# Session managementdef set_session(session_id, user_data): r.setex(f"session:{session_id}", timedelta(days=1), json.dumps(user_data))def get_session(session_id): session_data = r.get(f"session:{session_id}") return json.loads(session_data) if session_data else None
def get_product(product_id): # 1. Check cache first cache_key = f"product:{product_id}" product = r.get(cache_key) if product: return json.loads(product) # 2. Cache miss - get from database product = db.get_product(product_id) # 3. Store in cache for next time if product: r.setex(cache_key, 3600, json.dumps(product)) return product
def invalidate_user_cache(user_id): # Remove specific user data r.delete(f"user:{user_id}") # Remove related cached data r.delete(f"user_posts:{user_id}") r.delete(f"user_profile:{user_id}")def invalidate_pattern(pattern): # Remove all keys matching pattern keys = r.keys(pattern) if keys: r.delete(*keys)
# Use appropriate data types# Hash for objects with many fieldsHSET user:123 name "John" email "john@example.com" age 30# Use compression for large values# Consider msgpack or similar# Set appropriate TTLsSET large_data:123 "..." EX 1800 # 30 minutes