redis的淘汰机制

我们都知道redis缓存时可以设置过期时间,那么redis是如何识别这个key已经过期并将该key清掉呢?

当redis的内存满了之后,为什么还可以继续写缓存呢?而某些key又会被清掉,是什么原因呢?

以上问题就涉及到了redis的过期策略和淘汰机制,我们可以来了解一下。

redis为什么要有淘汰机制?

  redis淘汰机制的存在是为了更好的使用内存,用一定的缓存丢失来换取内存的使用效率。

redis的过期策略

  redis有两种过期策略,定期删除和惰性删除

    • 定期删除:redis每个100ms随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。
    • 惰性删除:在获取某个key的时候,redis检查一下,如果该key设置了过期时间则判断该过期时间是否已经过期,如果过期了就直接删掉并不返回任何东西。

redis的内存淘汰机制

  当redis内存快耗尽时,redis会启动内存淘汰机制,将部分key清掉以腾出内存。

  redis提供6中数据淘汰策略,可在redis.conf中配置:maxmemory-policy noeviction

  • noeviction:禁止驱逐数据。默认配置都是这个。当内存使用达到阀值的时候,所有引起申请内存的命令都会报错。
  • volatile-lru:从设置了过期时间的数据集中挑选最近最少使用的数据淘汰。
  • volatile-ttl:从已设置了过期时间的数据集中挑选即将要过期的数据淘汰。
  • volatile-random:从已设置了过期时间的数据集中任意选择数据淘汰。
  • allkeys-lru:从数据集中挑选最近最少使用的数据淘汰。
  • allkeys-random:从数据集中任意选择数据淘汰。

  当Redis确定好要驱逐某个键值对后,会删除这个数据,并将这个数据变更消息同步到本地和从机。

以上参考来自https://www.cnblogs.com/wjh123/p/11254858.htmlhttp://mini.eastday.com/mobile/180918003550027.html#

posted @   smallzhen  阅读(9882)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示