Redis 缓存策略详解

Redis缓存策略与实践

Redis是高性能的内存数据库,合理的缓存策略能显著提升应用性能。

常见缓存策略

1. Cache-Aside(旁路缓存)

function getData($key) {
    // 先从缓存读取
    $data = Redis::get($key);
    
    if ($data === null) {
        // 缓存未命中,从数据库读取
        $data = DB::table('users')->find($key);
        
        // 写入缓存
        Redis::setex($key, 3600, json_encode($data));
    }
    
    return json_decode($data, true);
}

2. Read-Through(读穿透)

缓存层自动从数据源加载数据。

3. Write-Through(写穿透)

数据同时写入缓存和数据库。

4. Write-Behind(写回)

先写入缓存,异步写入数据库。

缓存过期策略

  • 定时过期:设置固定过期时间
  • 惰性过期:访问时检查是否过期
  • 定期过期:定期清理过期键

缓存淘汰策略

# redis.conf
maxmemory-policy allkeys-lru

# 可选策略:
# noeviction - 不淘汰
# allkeys-lru - LRU淘汰
# volatile-lru - LRU淘汰设置过期的键
# allkeys-random - 随机淘汰
# volatile-random - 随机淘汰设置过期的键
# volatile-ttl - 淘汰TTL最小的键

缓存穿透、击穿、雪崩

缓存穿透:查询不存在的数据
解决方案:布隆过滤器、缓存空值

缓存击穿:热点数据过期
解决方案:互斥锁、永不过期

缓存雪崩:大量缓存同时过期
解决方案:过期时间加随机值、Redis集群

最后更新: 2026-01-10 07:41