redis过期策略/内存淘汰机制/对过期key的处理

java_wxid java_wxid     2023-02-21     652

关键词:

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

🍊博主:java_wxid
🍊博主:Java廖志伟
🍊社区:幕后大佬



本文内容:

Redis过期策略


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的大高个了。就是我这样的一个人,默默坚持写博文也有好多年了,有句老话说的好,🌕牛逼之前都是傻逼式的坚持🌕。希望自己可以通过大量的作品,时间的积累,个人魅力、运气和时机,可以打造属于自己的🌟技术影响力🌟。同时也希望自己可以成为一个🎄懂技术🎄,🎄懂业务🎄,🎄懂管理🎄的综合型人才,作为项目架构路线的总设计师,掌控全局的🌕团队大脑🌕,技术团队中的🍊绝对核心🍊是我未来几年不断前进的目标。


提示:以下都是资源分享,求个一键三连。

面试资料

福利大放送,🎉欢迎关注🔎点赞👍收藏⭐️留言📝,拜托了🙏,这对我真的很重要。
点击:面试资料
提取码:2021

200套PPT模板

福利大放送,🎉欢迎关注🔎点赞👍收藏⭐️留言📝,拜托了🙏,这对我真的很重要。
点击:200套PPT模板
提取码:2021

提问的智慧

福利大放送,🎉欢迎关注🔎点赞👍收藏⭐️留言📝,拜托了🙏,这对我真的很重要。
点击:提问的智慧
提取码:2021

Java开发学习路线

名称链接
JavaSE点击: JavaSE
MySQL专栏点击: MySQL专栏
JDBC专栏点击: JDBC专栏
MyBatis专栏点击: MyBatis专栏
Web专栏点击: Web专栏
Spring专栏点击: Spring专栏
SpringMVC专栏点击: SpringMVC专栏
SpringBoot专栏点击: SpringBoot专栏
SpringCould专栏点击: SpringCould专栏
Redis专栏点击: Redis专栏
Linux专栏点击: Linux专栏
Maven3专栏点击: Maven3专栏
Spring Security5专栏点击: Spring Security5专栏
更多专栏更多专栏,请到 java_wxid主页 查看

P5学习路线图
P6学习路线图
P7学习路线图
P8学习路线图

以上四张图详细介绍了作为Java开发工作者所需要具备的知识技能,同学们学废了嘛,有想法系统学习的同学可以私聊我,🎉欢迎关注🔎点赞👍收藏⭐️留言📝。
🍊博主:java_wxid
🍊博主:Java廖志伟
🍊社区:幕后大佬

redis过期策略和内存淘汰机制(代码片段)

目录常见的删除策略redis使用的过期策略:定期删除+惰性删除定期删除惰性删除为什么要采用定期删除+惰性删除2种策略呢?redis内存淘汰机制常见的删除策略1.定时删除:在设置键的过期时间的同时,创建一个timer,让定时器在键... 查看详情

面试官:redis过期删除策略和内存淘汰策略有什么区别?(代码片段)

...g.com大家好,我是小林。Redis的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都是做删除的操作,但是触发的条件和使用的策略都是不同的。今天就跟大家理一理,「内存淘汰... 查看详情

redis的过期策略以及内存淘汰机制(代码片段)

...不用定时删除策略?定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放,但是十分消耗CPU资源。在大并发请求下,CPU要将时间应用在处理请求,而不是删除key,因此没有采用这一策略.定期删除+... 查看详情

redis个人笔记

...干嘛?redis存在内存中,内存是有大小的。满了怎么办?过期策略:redis里面有过期的数据扔掉淘汰策略:redis淘汰机制过期策略:设置过期时间,不见了怎么办。ttlkey可以查询它的有效时间redis用了被动过期(惰性过期)和定期... 查看详情

redis——内存淘汰策略

...缓存耗尽的原因1、每台机器的内存是一定的2、key未设置过期时间key不设置过期时间则在内存中一直存在,直到我们明确删除它。3、过度或不合理的持久化无论RDB快照或者AOF日志,都会在内存和磁盘中反复操作,需要一定的内存... 查看详情

redis淘汰策略

Redis淘汰策略Redis的内存回收主要围绕Redis过期策略、Redis淘汰策略策略名称策略说明Redis过期策略删除过期时间的key值Redis淘汰策略内存使用到达maxmemory上限时触发内存淘汰数据Redis过期策略通常有以下三种:定时过期为每个... 查看详情

聊聊redis内存淘汰策略(代码片段)

...不着”前情回顾《源码级别了解Redis持久化》《聊聊Redis过期键删除策略》《Redis数据结构详解》《超详细Redis五种数据结构底层实现》这一期咱们一起来看看Redis的内存淘汰策略~为什么要有内存淘汰机制  大家都知道Redis中的键... 查看详情

redis_06_redis内存回收机制(代码片段)

文章目录一、前言二、生存时间和三种过期策略2.1生存时间的设置与读取2.2生存时间的底层保存(过期字典)2.3过期字典如何处理过期key(即过期key的删除):定时删除惰性删除定期删除三、淘汰策略3.1最大... 查看详情

redis之过期删除侧率

Redis中key的过期删除策略内存碎片如何产生碎片率的意义如何清理内存碎片内存淘汰触发的最大内存有哪些内存淘汰策略内存淘汰算法LRULFU1、定时删除2、惰性删除3、定期删除Redis中过期删除策略从库是否会脏读主库创建的过期... 查看详情

redis过期删除策略和内存淘汰策略

参考技术ARedis可以用使用expire指令设置过期时间,在Redis内部,每当我们设置一个键的过期时间时,Redis就会将该键带上过期时间存放到一个过期字典中。当我们查询一个键时,Redis便首先检查该键是否存在过期字典中,如果存在... 查看详情

redis源码六-redis中的缓存淘汰策略处理分析(代码片段)

...于把主线任务执行搞明白了和redis源码阅读五-为什么大量过期key会阻塞redis?梳理了redis的整体处理流程和redis的定期清理。都没有说到redis的过期策略。这次我来探究一下。我们都知道redis的缓存淘汰策略有以下几种:noeviction... 查看详情

redis的缓存淘汰策略lru与lfu

参考技术ARedis缓存淘汰策略与Redis键的过期删除策略并不完全相同,前者是在Redis内存使用超过一定值的时候(一般这个值可以配置)使用的淘汰策略;而后者是通过定期删除+惰性删除两者结合的方式淘汰内存过期键的。这里参... 查看详情

redis淘汰策略

...最大值二、淘汰策略1.8种策略volatile-lru,针对设置了过期时间的key,使用lru算法进行淘汰。allkeys-lru,针对所有key使用lru算法进行淘汰。volatile-lfu,针对设置了过期时间的key,使用lfu算法进行淘汰。allkeys-lfu... 查看详情

redis的过期删除策略

...你写了10G,那会删5G的数据。怎么删的?数据已经设置了过期时间,但是时间到了,内存占用率还是比较高,为什么?定期删除+惰性删除策略定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放,但是十分... 查看详情

redis内存回收——过期淘汰(代码片段)

.../*keyspace,存储所有key,value*/dict*expires;/*存储设置过期时间的key,ttl*/dict*blocking_keys;/*Keyswithclientswaitingfordata(BLPOP)*/dict*blocking_keys_unblock_on_nokey;/*Keyswithclientswaitingfor*data,andshouldbeunblockedifkeyisdeleted(XREADEDGROUP).*Thisisasubsetofb... 查看详情

面试题之redis的内存回收策略

...keys-random:随机淘汰一些key4、volatile-random:在已经设置了过期的时间去随机淘汰   volatile-lru:在已经设置了过期的时间去淘汰最少使用的数据   volatile-ttl:在已经设置了过期的时间去淘汰即将过期的key 查看详情

rediskey的删除淘汰策略(代码片段)

...达到maxMemory时根据配置淘汰规则3.1TTL3.2LRU3.2.1只对设置了过期时间的key进行lru算法删除3.2.2对所有key进行lru算法删除3.3LFU3.3.1只对设置了过期时间的key进行lfu算法删除3.3.2对所有key进行lfu算法删除3.4random3.4.1随机删除设置了过期时... 查看详情

面试官:redis过期删除策略和内存淘汰策略有什么区别?(代码片段)

...g.com大家好,我是小林。Redis的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都是做删除的操作,但是触发的条件和使用的策略都是不同的。今天就跟大家理一理,「内存淘汰... 查看详情