文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

redis key键过期删除策略及淘汰机制探究

2023-11-17 10:47

关注

redis过期删除

redis的键可以设置过期时间,但是并不是每个键一到过期时间就会立即删除,redis不可能给每个设置过期时间的key上添加一个定时器来监视是否过期,CPU根本承受不了如此多的定时线程

注意:我使用的版本是6.0.10,不同版本可能略有差别

删除策略

存在的删除策略:

redis采用的策略是定期删除+惰性删除

定期删除是指每隔一段时间去检查是否有过期的key,如果有则删除

惰性删除是指在获取key的时候检查一下这个key是否过期

定期删除的配置是hz(默认是10,即每秒十次扫描)

首先客户端在尝试访问某个key的时候,redis会检查是否过期,如果过期则删除,但是有些key是不会被访问到的,redis的定期删除则会进行扫描并删除过期的key

过期的key过多会导致循环抽取删除,为防止过度循环,增加了扫描时间的上限,默认不超过25ms

应该避免同一时刻大量key同时过期

在主从结构中,从服务器就算读取到过期键也不会删除,只有接收到主服务器发来的del命令之后才会删除

淘汰机制

配置最大内存的大小,如果超过该内存大小,就会使用淘汰机制进行淘汰

maxmemory 100mb

也可以通过命令进行修改

127.0.0.1:6380> config set maxmemory 50mb
OK
127.0.0.1:6380> config get maxmemory
1) "maxmemory"
2) "52428800"

由于使用定期删除+惰性删除机制,但是也可能很多过期的没有被删除掉导致内存不足的情况,所以redis存在淘汰机制

在使用volatile-lfu、volatile-random、volatile-ttl时,如果没有key可以淘汰,则与noeviction一样在写操作时返回错误

获取当前的内存策略

config get maxmemory-policy

可以在配置文件修改

maxmemory-policy noeviction

也可以使用命令设置

config set maxmemory-policy noeviction

在进行LRU/LFU/TTL淘汰策略时,并不是那么准确,可以通过采样率来进行设置其准确度,默认是5,即随机选出5个key,然后淘汰掉里面最近最少使用的key。

当设置为10的时候就非常接近真正的LRU算法了,但是会消耗更多的CPU,5已经是足够好的结果了

maxmemory-samples 5

以上就是redis key键过期删除策略及淘汰机制探究的详细内容,更多关于redis key键过期删除的资料请关注编程客栈(www.cppcns.com)其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯