ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Redis-内存淘汰策略-key凭空消失

Redis-内存淘汰策略-key凭空消失 Redis 内存淘汰策略为什么没过期的 key 会凭空消失Redis 内存打满后某些 key 会凭空消失即使 TTL 还没到期。本文讲清楚maxmemory淘汰策略的机制、各类策略的区别以及生产环境怎么选。一、问题案例一批商品详情缓存昨天还能命中今天全部报数据不存在。查数据库数据都在查 Redis那批 key 全没了——诡异的是它们的 TTL 明明还剩二十多天。查看内存和策略127.0.0.1:6379 INFO memory used_memory:3.9G maxmemory:4G 127.0.0.1:6379 CONFIG GET maxmemory-policy 1) maxmemory-policy 2) allkeys-lru内存快顶到上限策略是allkeys-lru——Redis 把最近最少用的 key 淘汰了。那批商品详情是长尾数据访问少TTL 再长也保不住。二、原理maxmemory 淘汰策略Redis 内存到达maxmemory时按maxmemory-policy决定删谁策略范围行为noeviction全部不淘汰写入直接报错allkeys-lru全部 key淘汰最近最少用的allkeys-lfu全部 key淘汰最不常用的volatile-lru只删设了 TTL 的淘汰最近最少用volatile-ttl只删设了 TTL 的淘汰 TTL 最短的volatile-random只删设了 TTL 的随机删关键区别volatile-*只对设置了过期时间的 key 生效allkeys-*连没设 TTL 的 key 也会淘汰。案例中的误区以为设了 TTL 就不会被提前删。实际上allkeys-lru根本不看 TTL只看最近用没用。三、生产环境怎么选纯缓存场景用allkeys-lru或allkeys-lfu淘汰冷数据保热数据合理。核心数据不能丢的单独放一个实例配noeviction写满就报警而不是默默删。监控内存水位别等打满才救火。CONFIG SET maxmemory-policy allkeys-lru# 缓存实例CONFIG SET maxmemory-policy noeviction# 核心数据实例四、延伸LRU 与 LFU 的区别LRULeast Recently Used谁最近没被访问就删谁适合时间局部性强的场景。LFULeast Frequently Used谁访问次数最少删谁适合有稳定热点、但冷数据偶尔被扫的场景。五、总结Redis 内存到maxmemory会按策略淘汰 keyallkeys-lru根本不看 TTL。重要数据别和缓存混在一个实例里核心数据用noeviction。缓存实例优先allkeys-lru/allkeys-lfu。我是无羡小剑全栈偏后端的独立开发者。作品集无羡 · 独立开发者作品集如果对你有帮助欢迎点赞、收藏、关注。
返回列表