跳转至

第五章:缓存雪崩

什么是缓存雪崩?

缓存雪崩:
- 大量缓存同时失效
- 所有请求涌向数据库
- 数据库压力骤增

解决方案

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
  • 限流降级:保护数据库

下一章我们将学习缓存击穿。