目录PreRedis Key的超时设置处理被动删除主动删除当前已用内存超过maxmemory限定时,触发主动清理策略对于过期键一般有三种删除策略 定时删除:在设置键的过期时
对于过期键一般有三种删除策略
下面我们来看看三种策略的优缺比较:
Redis-17Redis内存回收策略
expire key seconds
单位是秒。返回1成功,0表示key已经设置过过期时间或者不存在。 如果想消除超时则使用persist key。如果希望采用绝对超时,则使用expireat命令。
ttl key
返回设置过过期时间的key的剩余过期秒数 -1表示没有设置过过期时间,对于不存在的key,返回-2。
pexpire key 毫秒数
设置生命周期。
pttl key
以毫秒返回生命周期。
当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key.
举个例子, set 一个 过期时间为 600s的 key , 当 到了 600s后,redis 并不会执行删除, 为了性能,redis 会在你下次访问的时候 去删除 。
这样的话,我如果永远不访问,那不歇菜了么? 不要着急,Redis还有主动删除 。
由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key。
说白了,这就是定时任务干的活,防止有些key 一直占用内存。
当REDIS运行在主从模式时,只有主结点才会执行被动和主动这两种过期删除策略,然后把删除操作”del key”同步到从结点.
第三种策略的情况: 当前已用内存超过maxmemory限定时,会触发主动清理策略.
我们需要根据自身业务类型,选好maxmemory-policy(最大内存淘汰策略),设置好过期时间。如果不设置最大内存,当 Redis 内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换 (swap)会让 Redis 的性能急剧下降。
默认策略是volatile-lru,即超过最大内存后,在过期键中使用lru算法进行key的剔除,保证不过期数据不被删除,但是可能会出现OOM问题。
其他策略如下:
记住: volatile 开头的策略,只清理过期的key , 而all开头的策略则不管你过不过期,都会清理。
如果clien永远都不再get那条key呢?
redis会在Master的后台,每秒10次的执行如下操作:
随机选取100个key校验是否过期,如果有25个以上的key过期了,立刻额外随机选取下100个key(不计算在10次之内)。可见,如果过期的key不多,它最多每秒回收200条左右,如果有超过25%的key过期了,它就会做得更多。
到此这篇关于浅谈Redis对于过期键的三种清除策略的文章就介绍到这了,更多相关Redis 过期键清除内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 浅谈Redis对于过期键的三种清除策略
本文链接: https://lsjlt.com/news/158293.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0