结论:Redis的过期删除策略实战推荐使用惰性删除+定期删除的混合模式,这是网友公认的高效稳定方式,能最大程度提升缓存管理效率。设置maxmemory-policy allkeys-lru,并在redis.conf中调整hz 10以上,同时结合业务侧缓存穿透防护,就能稳定运行海量key场景。
网友分享1
在高并发场景下,Redis的删除策略默认是noeviction,会导致内存满时写失败。实战中我改成allkeys-lru,结合惰性删除和定期删除,每秒删除上万过期key,内存利用率提升30%,QPS稳在10w+。关键是调大hz参数到20,采样更多key。
网友分享2
测试过volatile-lru和allkeys-random,发现allkeys-lru最稳,最近最少使用key优先淘汰。代码示例:redis-cli CONFIG SET maxmemory-policy allkeys-lru,然后用expire设置key ttl=300。生产环境运行半年,缓存命中率95%,没出过雪崩。
网友分享3
缓存雪崩就是过期key集中删除导致的,实战用懒汉+定时器混合:Redis侧开启lazy+定时,应用层加随机ttl偏移,如原10min加[-30s,30s]随机。结果:峰值流量下,db压力降到1/10,超级高效。
网友分享4
大厂经验:hz设10~20,exire-delete-limit 100,避免定时删除卡主线程。监控脚本:redis-cli info | grep expired_keys,每日看删除量超10w就优化策略。allkeys-lru救了我一堆oom问题。
网友分享5
小tips:内存不足时allkeys-lru会淘汰全部key包括没过期的,适合热数据多场景;volatile-ttl只删有expire的key,适合明确ttl业务。实战对比,混合用最稳,效率up up。
网友分享6
代码实战:import redis r = redis.Redis() r.setex('key', 3600, 'value') #设置过期 在Python客户端捕获过期事件用keyevent通知,业务侧补缓存。网友推荐这个组合,稳定如老狗。
FAQ
Q: Redis惰性删除是什么?
A: 访问key时才检查是否过期,顺手删掉,不影响其他操作。
Q: 定期删除怎么调优?
A: 改redis.conf hz 20,定时扫描更多key删过期。
Q: allkeys-lru和volatile-lru区别?
A: 前者全key最近最少用,后者只限有过期key的。
Q: 怎么避免缓存雪崩?
A: 加随机ttl,设置不同过期时间分散删除。
Q: 内存满怎么处理?
A: 用INFO memory监控,提前设maxmemory和eviction策略。