0
点赞
收藏
分享

微信扫一扫

【Redis过期策略/内存淘汰机制/对过期Key的处理】



我是????廖志伟????,一名????Java开发工程师????、????Java领域优质创作者????、????CSDN博客专家????、????幕后大佬社区创始人????。拥有多年一线研发经验,研究过各种常见框架中间件的底层源码,对于大型分布式微服务、三高架构(高性能高并发高可用)有过实践架构经验。


????博主:java_wxid

????博主:Java廖志伟

????社区:幕后大佬


文章目录

  • ​​Redis过期策略​​
  • ​​惰性删除流程​​
  • ​​定期删除流程​​
  • ​​内存淘汰机制​​
  • ​​RDB对过期key的处理​​
  • ​​AOF对过期key的处理​​


本文内容:

Redis过期策略

【Redis过期策略/内存淘汰机制/对过期Key的处理】_过期策略

Redis采用的过期策略

惰性删除+定期删除

惰性删除流程

在进行get或setnx等操作时,先检查key是否过期,若过期,删除key,然后执行相应操作;若没过期,直接执行相应操作

定期删除流程

对指定个数个库的每一个库随机删除小于等于指定个数个过期key,遍历每个数据库(就是redis.conf中配置的"database"数量,默认为16),检查当前库中的指定个数个key(默认是每个库检查20个key,注意相当于该循环执行20次,循环体时下边的描述),如果当前库中没有一个key设置了过期时间,直接执行下一个库的遍历,随机获取一个设置了过期时间的key,检查该key是否过期,如果过期,删除key,判断定期删除操作是否已经达到指定时长,若已经达到,直接退出定期删除。

问题:定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?如果大量过期 key 堆积在内存里,导致 Redis 内存块耗尽了,怎么解决呢?走内存淘汰机制

内存淘汰机制

Redis 内存淘汰机制有以下几个:

noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧,实在是太恶心了。 allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)。

allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的 key 给干掉啊。

volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key(这个一般不太合适)。

volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。

volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。

RDB对过期key的处理

过期key对RDB没有任何影响,从内存数据库持久化数据到RDB文件:持久化key之前,会检查是否过期,过期的key不进入RDB文件 从RDB文件恢复数据到内存数据库:数据载入数据库之前,会对key先进行过期检查,如果过期,不导入数据库(主库情况)

AOF对过期key的处理

过期key对AOF没有任何影响 从内存数据库持久化数据到AOF文件:当key过期后,还没有被删除,此时进行执行持久化操作(该key是不会进入aof文件的,因为没有发生修改命令)当key过期后,在发生删除操作时,程序会向aof文件追加一条del命令(在将来的以aof文件恢复数据的时候该过期的键就会被删掉) AOF重写:重写时,会先判断key是否过期,已过期的key不会重写到aof文件

总结


以上就是今天要讲的内容,还希望各位读者大大能够在评论区积极参与讨论,给文章提出一些宝贵的意见或者建议????,合理的内容,我会采纳更新博文,重新分享给大家。


????四连 关注????点赞????收藏⭐️留言????


感谢大家的支持,用心写博文分享给大家,你的支持(????点赞????收藏⭐️留言????)是对我创作的最大帮助。
????微信公众号:南北踏尘
????主页地址:java_wxid
????社区地址:幕后大佬


给读者大大的话


我本身是一个很普通的程序员,放在人堆里,除了与生俱来的????盛世美颜????、所剩不多的发量,就剩下180的大高个了。就是我这样的一个人,默默坚持写博文也有好多年了,有句老话说的好,????牛逼之前都是傻逼式的坚持????。希望自己可以通过大量的作品,时间的积累,个人魅力、运气和时机,可以打造属于自己的????技术影响力????。同时也希望自己可以成为一个????懂技术????,????懂业务????,????懂管理????的综合型人才,作为项目架构路线的总设计师,掌控全局的????团队大脑????,技术团队中的????绝对核心????是我未来几年不断前进的目标。



举报

相关推荐

0 条评论