第五章:缓存雪崩¶
什么是缓存雪崩?¶
解决方案¶
1. 过期时间随机化¶
import random
def set_cache(key, value, base_ttl=3600):
# 添加随机过期时间
ttl = base_ttl + random.randint(0, 300)
redis.setex(key, ttl, value)
2. 缓存预热¶
def warm_up_cache():
"""系统启动时预热缓存"""
hot_keys = get_hot_keys()
for key in hot_keys:
value = query_from_db(key)
redis.setex(key, 3600, value)
3. 多级缓存¶
def get_data(key):
# L1 缓存(本地)
value = local_cache.get(key)
if value:
return value
# L2 缓存(Redis)
value = redis.get(key)
if value:
local_cache.set(key, value, ttl=60)
return value
# 数据库
value = db.query(key)
if value:
redis.setex(key, 3600, value)
local_cache.set(key, value, ttl=60)
return value
4. 限流降级¶
from circuitbreaker import circuit
@circuit(failure_threshold=5, recovery_timeout=30)
def get_data_with_fallback(key):
try:
return get_data(key)
except Exception:
# 降级返回默认值
return get_default_value()
小结¶
缓存雪崩解决要点:
- 过期时间随机化:避免同时失效
- 缓存预热:启动时加载热点数据
- 多级缓存:本地缓存 + Redis
- 限流降级:保护数据库
下一章我们将学习缓存击穿。