-
2020-11-24 12:11:12
Redis 淘汰策略
Redis可选项
volatile-lru
从设置了过期时间中的数据集中, 选择最近最少使用的数据,进行释放
allkeys_lru
在全部的数据集中, 选择最近最少使用的数据,进行释放
LRU算法
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
百度科普链接 : https://baike.baidu.com/item/LRU/1269842?fr=aladdin
volatile_random
从设置了过期时间的数据当中,随机选择一个数据进行释放
allkeys_random
从全部的数据中,随机随机选择数据进行释放
votatile_ttl
从设置了过期时间的数据中, 找即将要过期的数据进行释放
noeviction
不删除任何数据, 这时如果内存不够时,会直接返回错误。
Redis配置
redis 的默认配置
noeviction
,在Redis中使用LRU近似算法, 默认情况下 随机挑选5个键从中获取最近最少使用的数据进行释放,在配置文件中可以通过maxmemory-samples
的值来设置redis需要检查key的个数,但是检查的越多,耗费的时间也就越久,淘汰的数据越精确redis配置文件中默认
maxmemory-policy noeviction
更多相关内容 -
redis淘汰策略是什么?redis淘汰策略有哪些?
2021-03-17 19:26:31我们应该了解的redis淘汰策略有哪些呢?首先,当我们的redis的内存空间已经用满时,redis将根据配置的淘汰策略(maxmemory-policy),进行相应的动作。redis内存淘汰指的是用户存储的一些键被可以被redis主动地从实例中...redis,可以看作是一种内存数据库,相信熟悉数据库相关知识的朋友们都不会对redis感到陌生,下面我们就一起来看看redis的淘汰策略到底是指的什么?我们应该了解的redis淘汰策略有哪些呢?
首先,当我们的redis的内存空间已经用满时,redis将根据配置的淘汰策略(maxmemory-policy),进行相应的动作。redis内存淘汰指的是用户存储的一些键被可以被redis主动地从实例中删除,从而产生读miss的情况,
假设我们有一个redis服务器,服务器物理内存大小为1G的,我们需要存在redis中的数据量很小,这看起来似乎足够用很长时间了,随着业务量的增长,我们放在redis里面的数据越来越多了,数据量大小似乎超过了1G,但是应用还可以正常运行,这是因为操作系统的可见内存并不受物理内存限制,而是虚拟内存,物理内存不够用没关系,操作系统会从硬盘上划出一片空间用于构建虚拟内存,比如32位的操作系统的可见内存大小为2^32,而用户空间的可见内存要小于2^32很多,大概是3G左右。
好了,我们庆幸操作系统为我们做了这些,但是我们需要知道这背后的代价是不菲的,不合理的使用内存有可能发生频繁的swap,频繁swap的代价是惨痛的。所以回过头来看,作为有追求的程序员,我们还是要小心翼翼地使用好每块内存,把用户代码能解决的问题尽量不要抛给操作系统解决。说到这里,我们可以了解到,内存的淘汰机制的初衷是为了更好地使用内存,用一定的缓存miss来换取内存的使用效率。
内存淘汰只是redis提供的一个功能,为了更好地实现这个功能,必须为不同的应用场景提供不同的策略,redis提供了下面几种淘汰策略供用户选择,其中默认的策略为no-eviction策略:
一、no-eviction:不删除策略
当达到最大内存限制时,如果还需要更多的内存:直接返回错误
二、allkeys-lru
当达到最大内存限制时,如果还需要更多的内存:在所有的key中,挑选最近最少使用(LRU)的key淘汰
三、volatile-lru
当达到最大内存限制时,如果还需要更多的内存:在设置了expire(过期时间)的key中,挑选最近最少使用(LRU)的key淘汰
四、allkeys-random
当达到最大内存限制时,如果还需要更多的内存:在所有的key中,随机淘汰部分key
五、volatile-random
当达到最大内存限制时,如果还需要更多的内存:在设置了expire(过期时间)的key中,随机淘汰部分key
六、volatile-ttl
当达到最大内存限制时,如果还需要更多的内存:在设置了expire(过期时间)的key中,挑选TTL(time to
live,剩余时间)短的key淘汰
以上就是有关redis淘汰策略的相关介绍了,希望能对大家有所帮助,欢迎关注本站了解更多有关内容哦。
-
redis六种淘汰策略,redis默认的淘汰策略,如何设置redis淘汰策略和最大内存
2021-03-06 14:42:51本文大概讲一下redis六种淘汰策略 一、六种淘汰策略 1.noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外) 2.allkeys-lru:从所有key中使用LRU算法进行淘汰 3.volatile-...redis是个基于内存的缓存数据库,既然是基于内存的,那肯定就会有存满的时候
如果真的存满了,再有新的数据过来肯定就存不进去了
此时redis会执行既定的一些淘汰策略,本文大概讲一下redis六种淘汰策略
一、六种淘汰策略
1.noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)
2.allkeys-lru:从所有key中使用LRU算法进行淘汰(LRU算法:即最近最少使用算法)
3.volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰
4.allkeys-random:从所有key中随机淘汰数据
5.volatile-random:从设置了过期时间的key中随机淘汰
6.volatile-ttl:在设置了过期时间的key中,淘汰过期时间剩余最短的
当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和noeviction一样返回错误
二、如何获取及设置内存淘汰策略
1、获取当前内存淘汰策略:
127.0.0.1:6379> config get maxmemory-policy
可以看到当前使用的默认的noeviction策略
2、获取Redis能使用的最大内存大小
127.0.0.1:6379> config get maxmemory
如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存。32 位的机器最大只支持 4GB 的内存,而系统本身就需要一定的内存资源来支持运行,所以 32 位机器限制最大 3 GB 的可用内存
3、设置淘汰策略
通过配置文件设置淘汰策略(修改redis.conf文件):
maxmemory-policy allkeys-lru
通过命令修改淘汰策略:
127.0.0.1:6379> config set maxmemory-policy allkeys-lru
4、设置Redis最大占用内存大小
#设置Redis最大占用内存大小为100M 127.0.0.1:6379> config set maxmemory 100mb
纯手敲原创不易,如果觉得对你有帮助,可以打赏支持一下,哈哈,感谢~
-
Redis 淘汰策略和删除策略
2021-03-10 10:13:292、内存淘汰机制 Redis有过期策略,假如你的Redis只能存1G的数据,你一个请求写入2G,而你也没有及时请求key,那么惰性删除就不生效了,Redis占用内存就会越来越高。 Redis可以设置内存大小: maxmemory 设置Redis...1.定时删除
在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除
优点:
保证内存被尽快释放
缺点:
1)若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key。
2)定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重2.惰性删除
key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
优点:
删除操作只发生在从数据库取出key的时候发生,而且只删除当前key,所以对CPU时间的占用是比较少的,而且此时的删除是已经到了非做不可的地步.
缺点:
若大量的key在超出超时时间后,很久一段时间内,都没有被获取过,那么可能发生内存泄露(无用的垃圾占用了大量的内存)3.定期删除
如果当前库中没有一个key设置了过期时间,直接执行下一个库的遍历,随机获取一个设置了过期时间的key,检查该key是否过期,如果过期,删除key,判断定期删除操作是否已经达到指定时长,若已经达到,直接退出定期删除。(默认每个库检测20个key)
优点:
1)通过限制删除操作的时长和频率,来减少删除操作对CPU时间的占用–处理"定时删除"的缺点
2)定期删除过期key–处理"惰性删除"的缺点
缺点:
1)在内存友好方面,不如"定时删除"
2)在CPU时间友好方面,不如"惰性删除"Redis采用的策略:定期删除+惰性删除
如何配置?
2、内存淘汰机制
Redis有过期策略,假如你的Redis只能存1G的数据,你一个请求写入2G,而你也没有及时请求key,那么惰性删除就不生效了,Redis占用内存就会越来越高。
Redis可以设置内存大小:
maxmemory
设置Redis最大占用内存大小为100
maxmemory 100mb
超过了这个内存大小,就会触发内存淘汰机制Redis有一个默认 内存淘汰机制:
maxmemory-policy noeviction
maxmemory-policy一共有8个值,当内存不足时:
1)noeviction: 不删除,直接返回报错信息。
2)allkeys-lru:移除最久未使用(使用频率最少)使用的key。推荐使用这种。
3)volatile-lru:在设置了过期时间的key中,移除最久未使用的key。
4)allkeys-random:随机移除某个key。
5)volatile-random:在设置了过期时间的key中,随机移除某个key。
6)volatile-ttl: 在设置了过期时间的key中,移除准备过期的key。
7)allkeys-lfu:移除最近最少使用的key。
8)volatile-lfu:在设置了过期时间的key中,移除最近最少使用的key。LRU和LFU的区别:
LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!比如有数据 1,1,1,2,2,3
此时缓存中已有(1,2)
当3加入的时候,得把前面的1淘汰,变成(3,2)LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!
比如有数据 1,1,1,2,2,3
缓存中有(1(3次),2(2次))
当3加入的时候,得把后面的2淘汰,变成(1(3次),3(1次))引申:
假如我的key没有设置expire,即没有设置过期时间。那么 volatile-lru、volatile-random、volatile-ttl 就无法执行了,和 noeviction 就一样了。
-
Redis淘汰策略过期回调和事务
2022-03-28 20:00:11文章目录1.Redis淘汰策略简介2.Redis六种淘汰策略3.Redis中的自动过期机制3.1简介3.2开启回调监听机制3.3SpringBoot整合redis实现key失效监听4.Redis事务操作4.1Redis事务和mysql事务有什么区别?4.2Redis的watch... -
redis淘汰策略详解
2019-08-20 12:35:39redis六种淘汰策略详解 解决方法: 如果redis.conf设置了maxmemory,那redis内存到达这个值得时候就开始执行淘汰策略。如果不设置maxmemory或者设置为0,64位系统不限制内存,32位系统最多使用3GB内存,那么... -
Redis淘汰策略
2018-10-23 11:06:27用于解决什么问题呢?举个例子 1)我们都知道技术都是衍生于问题的。那我们就来说说用来做什么吧。 大家可以想想,当我们的物理服务...淘汰策略 1)voltile-lru:从已设置过期时间的数据集(server.db[i].ex... -
Redis内存淘汰策略
2022-04-29 09:14:19目录一、Redis六种淘汰策略二、如何配置Redis淘汰策略 将Redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据。 一、Redis六种淘汰策略 noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错... -
Redis过期策略和淘汰策略
2022-03-25 14:57:221 过期删除策略 1.1 定时删除 当对一个key设置了过期时间,当该时间到,立即执行对该key的删除。 优点:定时删除对内存最友好,保证key一旦过期就能立即从内存中删除。 缺点:对CPU最不友好,在过期键比较多的... -
Redis之淘汰策略
2021-12-28 15:57:42redis内存不足时的淘汰策略 一般情况下,当内存超出物理内存限制时,内存数据将与磁盘产生频繁交换(swap),swap会导致redis性能急剧下降,对于访问量较大的情况下,swap的存取效率会让服务基本处于不可用的状态。 ... -
redis 淘汰策略
2021-09-02 11:19:33redis 淘汰策略 淘汰策略概述 什么叫数据淘汰策略?什么样的应用场景需要用到数据淘汰策略? 当新数据进入redis时,如果内存不足怎么办?在执行每一个命令前,会调用**freeMemoryIfNeeded()**检测内存是否充足。如果... -
redis淘汰策略
2021-10-24 14:28:24redis内存不足怎么办,淘汰策略 no eviction redis中lru算法(Least recently used,最近最少使用),采用最久未使用策略 最久未使用存在的问题,对A来说相当不公平 lfu(Last Frequently Use 最不常(频繁)... -
Redis的淘汰策略
2022-05-04 11:34:48Redis的淘汰策略 -
redis数据淘汰策略
2022-03-27 16:27:51一、什么是数据淘汰 当新数据进入redis之前,会调用freeMemoryIfNeeded()检测内存是否充足。如果内存不满足加入数据的最低要求,redis就会临时删除一些数据来存储新的数据。 清理数据的策略称为逐出算法 逐出数据... -
redis 缓存淘汰策略配置
2021-11-04 11:53:23而一旦 redis 内存超出物理内存限制时,内存的数据就会开始和磁盘频繁的交换(swap); 这种涉及到 IO 操作机制的操作,会让 redis 的性能急剧下降。redis 访问量本来就十分频繁,存取效率大幅度降低是很致命的。 ... -
redis 内存淘汰策略配置
2018-12-25 09:14:33对应的策略 noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。 allkeys-lru:在主键空间中,优先移除最近未使用的key。(推荐) volatile-lru:在设置了过期时间的键空间中,优先移除最近未... -
Redis缓存淘汰策略
2020-07-28 20:31:44Redis是基于内存key-value键值对的内存数据库,我们安装完数据库之后,内存往往会受到系统内存大小的限制,我们也可以配置redis能使用的最大的内存大小 1.配置Redis内存 (1)通过配置文件修改 我们可以通过配置... -
Redis系列(十七)、Redis中的内存淘汰策略和过期删除策略
2020-07-07 21:25:37我们知道Redis是分布式内存数据库,基于内存运行,可是有没有想过比较好的服务器内存也不过几百G,能存多少数据呢,当内存占用满了之后该怎么办...不要怕,本篇我们一起来看一下Redis的内存淘汰策略是如何释放内存的。 -
Redis 内存淘汰策略
2021-06-23 09:08:38大家都知道 Redis 中的键会设置过期时间,当到达过期时间时会通过一定策略清除对应 key,但是 redis 内存是由上限的,当达到内存上限时,就要通过一定策略淘汰掉相应 kv 键值对。 Redis 内存上限 maxmemory 配置... -
redis 八大淘汰策略(redis5.0)
2021-03-23 08:38:09当Redis的内存使用达到设置的内存上限时就会触发内存淘汰机制,按照特定的淘汰算法进行数据清理,释放内存。 (1)noeviction:不淘汰,内存不足时, 新写入会报错。 (2)allkeys-lru:LRU,内存不足时,淘汰最近... -
redis缓存淘汰策略
2021-08-06 11:43:56针对该情况,redis提供对应缓存淘汰策略,了解各种缓存淘汰策略,在使用时合理设置缓存淘汰策略可以避免缓存被写满,提高缓存命中率,提升系统性能。 目前最新版本6.2.5提供8种缓存淘汰策略,这些缓存淘汰策略可以...