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