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

刘Java 刘Java     2023-01-07     283

关键词:

简单介绍了Redis的内存淘汰策略。

Redis的maxmemory参数用于指定 Redis 能使用的最大内存,既可以在 redis.conf 配置文件中设置(单位Byte),也可以在运行过程中通过 CONFIG SET 命令动态修改。

maxmemory 设置为0,或者没有设置该参数,则表示不进行内存限制。但对32位系统来说有一个隐性的限制条件是最多使用 3GB 内存,64位系统则无限制。

当达到内存限制时(maxmemory),Redis 将尝试根据选择的淘汰策略删除一部分key。淘汰可以在redis.conf中配置maxmemory-policy属性,或者通过config set maxmemory-policy命令动态的配置。

Redis的默认策略为noeviction,支持的策略有8种

策略描述
volatile-lru只对设置了expire过期时间的key生效,优先删除最近最少使用(least recently used ,LRU) 的 key,直到有可用的内存,如果没有可删除的key并且内存还是不够,则报错。
allkeys-lru所有key通用;优先删除最近最少使用(least recently used ,LRU)的key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
volatile-lfuRedis4.0新增的策略。只对设置了expire过期时间的key生效,优先删除最不常用(least frequently used ,LFU) 的 key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
allkeys-lfuRedis4.0新增的策略。所有key通用;优先删除最不常用(least frequently used , LFU)的key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
volatile-random只对设置了expire过期时间的key生效,随机删除一部分key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
allkeys-random所有key通用,随机删除一部分key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
volatile-ttl只对设置了expire过期时间的key生效,优先删除剩余时间(time to live,TTL) 最短的key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
noeviction默认策略,不删除任何key,在进行写操作时返回错误信息

LRU (Least recently used) ,最近最少使用,如果数据最近被访问过,那么将来被访问的几率也更高,也就不会被淘汰。也就是优先淘汰最长时间未被使用的数据,这个主要针对的是访问时间,可能存在某些key值在前一段时间访问很频繁,但是最近没被访问,从而被 LRU 算法删除。Java中可以通过继承LinkedHashMap并重写removeEldestEntry方法可以快速实现一个LUR Cache,此前我们学习过了:LinkedHashMap源码深度解析与LRU缓存实现

很多的书籍和博客都将LRU翻译为“最近最少使用”,但这样的翻译就有迷惑性,因为实际上LRU算法和使用频率没有任何关系,而是和最近访问时间有关系,它仅仅是淘汰最久未被访问的缓存而已,因此LRU应该翻译为“最久使用”更为贴切。

LFU (Least frequently used) ,最不经常使用,如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小,就会被淘汰。也就是优先淘汰一定时期内被访问次数最少的数据,这个主要针对的是访问频率,可能存在某些 key 值在前一段时间访问很频繁,但是最近以及以后的时间访问比较少,但是因为属于同一个时间段而被 LFU算法保留。

相关文章:

  1. https://redis.io/topics/data-types
  2. https://redis.io/topics/data-types-intro

如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!

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

简单介绍了Redis的内存淘汰策略。Redis的maxmemory参数用于指定Redis能使用的最大内存,既可以在redis.conf配置文件中设置(单位Byte),也可以在运行过程中通过CONFIGSET命令动态修改。将maxmemory设置为0,或者没有... 查看详情

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

...性删除为什么要采用定期删除+惰性删除2种策略呢?redis内存淘汰机制常见的删除策略1.定时删除:在设置键的过期时间的同时,创建一个timer,让定时器在键的过期时间到达时,立即执行对键的删除操作。(主动删除)对内存友... 查看详情

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

目录一、Redis的内存淘汰策略  1.1.概念  1.2.策略一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF... 查看详情

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

目录一、Redis的内存淘汰策略  1.1.概念  1.2.策略一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF... 查看详情

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

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

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

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

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

目录一、面试题二、Redis内存满了怎么办2.1结论三、redis里写的数据如何删除的?3.1三种不同的删除策略3.1.1立即删除3.1.2惰性删除3.1.3定期删除3.3.4总结四、redis缓存淘汰策略4.1有哪些4.2你平时用哪一种五、总结一、面试题生... 查看详情

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

目录一、Redis的内存淘汰策略  1.1.概念  1.2.策略一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF... 查看详情

redis内存满了怎么办,redis导致系统内存爆满(代码片段)

...改配置文件Redis长期使用,不设置过期时间,导致内存爆满,可以修改Redis的配置文件redis.conf文件中,配置参数maxmemory的大小。一般的项目maxmemory设置为3~5G即可,也可以根据自己服务器内存大小进行配置。maxme... 查看详情

redis中的lru淘汰策略分析(代码片段)

Redis作为缓存使用时,一些场景下要考虑内存的空间消耗问题。Redis会删除过期键以释放空间,过期键的删除策略有两种:惰性删除:每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有... 查看详情

你说,redis如何实现键值自动清理?(代码片段)

...础用法还得了解Redis的相关原理,比如Redis过期策略和内存淘汰机制。大家都知道,Redis缓存使用的是内存资源,虽然缓存服务器会配置比较高的内存资源,但如果对于Redis中的缓存数据我们不管不顾,内存资源... 查看详情

吃透redis:缓存淘汰篇-lru算法(代码片段)

...法执行?算法具体如何执行三、总结一、概述redis是内存数据库,当内存使用达到了一定阈值,就会触发缓存淘汰策略,这和Redis配置文件redis.conf中的两个配置参数有关:maxmemory,该配置项设定了Redisserver... 查看详情

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

DB结构删除策略惰性删除周期删除SLOWFAST淘汰策略redis内存设置过大时会增加同步等操作的复杂度DB结构/*Redisdatabaserepresentation.Therearemultipledatabasesidentified*byintegersfrom0(thedefaultdatabase)uptothemaxconfigured*database.Thedatabasenumberisthe'id'f... 查看详情

redis淘汰策略

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

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

...redis的缓存淘汰策略有以下几种:noeviction无过期策略,内存满了就直接异常volatile-lru对有过期时间的key进行lru淘汰(越长时间没有被访问,越容易被淘汰)allkeys-lru对全局的key按LRU进行淘汰(越长时间没有被访... 查看详情

redis内存满了怎么办?让你玩懂8种内存淘汰策略(代码片段)

...数据库知识于哥你好,最近java面试被问到:Redis内存满了怎么办??如果你只回答增加内存来解决,这样的话你基本上是GG了。今天有时间给大家总结一下这个问题Redis占用内存大小我们知道Redis是基于内存的ke... 查看详情

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

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

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

...f09;:定时删除惰性删除定期删除三、淘汰策略3.1最大内存设置3.2淘汰策略四、尾声一、前言问题:redis为什么需要内存回收机制?回答: 查看详情