Redis 淘汰策略解读
摘要:
Redis 在生产环境中,采用配置参数 maxmemory 的方式来限制内存的大小。当实际存储内存超过 maxmemory 参数值时,开发者可以通过 Redis 内存淘汰策略,来决定如何腾出新空间继续支持读写工作。
工作情况
首先,客户端会发起需要更多内存的申请;其次,Redis 检查内存使用情况,如果实际使用内存已经超出 maxmemory, Redis 会根据用户配置的淘汰策略选出无用的 Key,执行淘汰任务。
淘汰策略
volatile-lru
从过期时间的数据集(server.db[i].expires)中挑选出最近最少使用的数据淘汰。没有设置过期时间的 key 不会被淘汰,这样就可以在增加内存空间的同时保证需要持久化的数据不会丢失。
volatile-ttl
除了淘汰机制不同,策略上基本与 volatile-lru 相似,从设置过期时间的数据集(server.db[i].expires) 中挑选将要过期的数据淘汰,ttl 值越小,越容易被淘汰。
volatile-random
从设置过期时间的数据集(server.db[i].expires) 中任意选择数据淘汰。
allkeys-lru
从数据集(server.db[i].dict) 中挑选最近最少使用的数据淘汰,该策略要淘汰的 key 面向的是全体 Key 集合,而非过期的 Key 集合
allkeys-random
从数据集(server.db[i].dict)中选择任意数据淘汰。
no-enviction
禁止驱逐数据,也就是当内存不足以容纳新入数据时,新写入操作就会报错,采用该策略可以保证数据不被丢失,也是系统默认的一种淘汰策略。
注意:在Redis中,LRU算法是一个近似算法,默认情况下,Redis会随机挑选5个键,并从中选择一个最久未使用的key进行淘汰。在配置文件中,按maxmemory-samples选项进行配置,选项配置越大,消耗时间就越长,但结构也就越精准。
参考资料:
https://stor.51cto.com/art/201904/594773.htm
https://wiki.jikexueyuan.com/project/redis/data-elimination-mechanism.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
2019-03-17 c++ 面试题(网络类)