redis内存淘汰机制
Redis 的过期策略主要有两种思路:
1、定期删除
在redis中默认是每隔100ms 就随机抽取一些设置了过期时间的key,检查其是否过期,若过期就删除
假设有100W的key,并且都设置了过期时间,如果全量检查的话,将会耗费大量的cpu时间,因此使用随机抽取。
可能带来的问题是,已经过期的key还滞留在内存中,占用大量的宝贵内存空间。
2、惰性删除
当key过期后,不做删除动作,等到下次使用的时候,发现key过期,这时不在返回这个key的value,直接将这个key删掉。
所以redis的过期策略是:定期删除+惰性删除
但是新的问题是,定期删除可有会导致很多过期的key到了时间并没有删除掉,然后我们也没有及时的去做检查,也没有惰性删除掉,此时的结果就是大量的过期key堆积在内存中,导致redis的内存被耗尽。
最终的解决方式---------------内存淘汰机制。
内存淘汰机制:
1 2 3 4 5 6 | 1、noeviction:当内存不足以容纳新写入数据时,新写入操作报错。(谁傻谁用) 2、allkey-lru:到内存不足以容纳新写入数据时,在key空间中,删除最近最少使用的key。(常见) 3、allkey-random:当内存不足以容纳新写入数据时,在key空间中,随机删除某个key。(没有allkey-lru好) 4、 volatile -lru:当内存不足以容纳新写入数据时,在设置了过期时间的key中,删除最近最少使用的key。(用得不多) 5、 volatile -random:当内存不足以容纳新写入数据时,在设置了过期时间的key中,随机删除。 6、 volatile -ttl:当内存不足以容纳新写入数据时,在设置了过期时间的key中,有更早过期时间的key优先删除。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端