Redis缓存淘汰策略

Redis缓存淘汰策略

当 redis 内存超出物理内存限制时,内存的数据会开始和磁盘产品频繁的交换(swap)。这种机制因为涉及到 IO 操作,所以会让 redis 的性能急剧下降。redis 访问量本来就十分频繁,存取效率大幅度降低是很致命的。

在生产环境中我们是不允许 redis 出现 swap 行为的。所以一般会限制最大的使用内存,redis 提供了配置参数maxmemory 来规定最大的使用内存。

以下配置均为合法:

maxmemory 1000KB
maxmemory 100MB
maxmemory 1GB
maxmemory 0  # 表示不做限制,一般不会用

当实际内存超出了 maxmemory 时,redis(5.0.8) 提供了八种淘汰策略(maxmemory-policy)供我们选择。


  • noeviction

写请求会报错 (DEL 请求可以继续服务),读请求可以继续进行。这样可以保证不会丢失数据,但是会让线上的业务不能持续进行。这是默认的淘汰策略。


  • volatile-lru

淘汰范围:设置了过期时间的 key。(没有设置过期时间的 key 不会被淘汰,这样可以保证需要持久化的数据库不会突然丢失)

淘汰策略:优先删除最近最少使用的 key。(LRU算法实现:Least recently used,最近最少使用。)


  • volatile-lfu

淘汰范围:设置了过期时间的 key。

淘汰策略:优先删除使用频率最少的 key。(LFU算法实现:Least frequently used,最不经常使用。)


  • volatile-ttl

淘汰范围:设置了过期时间的 key。

淘汰策略:优先删除剩余时间(ttl,time to live)短的 key。


  • volatile-random

淘汰范围:设置了过期时间的 key。

淘汰策略:随机删除淘汰范围内的 key。


  • allkeys-lru

淘汰范围:全体 key。

淘汰策略:优先删除最近最少使用的 key。(LRU算法实现:Least recently used,最近最少使用。)


  • allkeys-lfu

淘汰范围:全体 key。

淘汰策略:优先删除使用频率最少的 key。(LFU算法实现:Least frequently used,最不经常使用。)


  • allkeys-random

淘汰范围:全体 key。

淘汰策略:随机删除淘汰范围内的 key。


  • 关于用哪个?

LRU算法淘汰的是最近最少使用的;
LFU算法淘汰的是一直以来使用频率最少的。

还是得结合业务场景去考虑。
一般还是volatile-lru会偏多一点吧。

具体配置:

maxmemory-policy volatile-lru
posted @   苦瓜爆炒牛肉  阅读(766)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示