redis——内存淘汰策略

shog808 shog808     2023-04-01     532

关键词:

一、缓存耗尽的原因

1、每台机器的内存是一定的

2、key未设置过期时间

key不设置过期时间则在内存中一直存在,直到我们明确删除它。

3、过度或不合理的持久化

无论RDB快照或者AOF日志,都会在内存和磁盘中反复操作,需要一定的内存空间。

4、不及时清理过期缓存

有时过期缓存依旧存在,主要和缓存清理方式有关:

  • 主动定期删除  Redis默认每隔1s运行10次,每次随机抽取部分设置过期时间的key,检查是否过期,如果过期则删除key,直至过期的key比率低于1/4
  • 被动惰性删除  当客户端查询该key时,检查key是否过期,如果过期则删除key重新获取。

5、不合理不规范使用缓存

过度使用缓存,冷热数据不分;缓存过多或单个缓存value过大;缓存过期时间设置过长

二、淘汰策略

分三类:

  • 不淘汰而是直接拒绝写入新key (默认):1
  • 从设置了过期时间的key中淘汰: 2、3、4、5
  • 从所有key中淘汰: 6、7、8

1、noeviction

当写入新数据后的内存超过限定值时,写请求直接返回错误,只读请求可以正常执行,默认策略。

2、volatile-lru

当写入新数据后的内存超过限定值时,从设置了过期时间的key中使用LRU算法淘汰最久没有使用过的key。

LRU(Least Recently Used)

3、volatile-lfu

当写入新数据后的内存超过限定值时,从设置了过期时间的key中使用LFU算法淘汰使用频率最低的key。

LFU(Least Frequently used)

4、volatile-random

当写入新数据后的内存超过限定值时,从设置了过期时间的key中随机淘汰key。

5、volatile-ttl

当写入新数据后的内存超过限定值时,从设置了过期时间的key中根据过期时间淘汰key,越快过期越早淘汰。

6、allkeys-lru

当写入新数据后的内存超过限定值时,从所有key中使用LRU算法(最近最少使用算法)淘汰最久没有使用过的key。

7、allkeys-lfu

当写入新数据后的内存超过限定值时,从所有key中使用LFU算法(最少频率访问算法)淘汰使用频率最低的key。

8、allkeys-random

当写入新数据后的内存超过限定值时,从所有key中随机淘汰key

三、策略相关命令

#获取当前内存淘汰策略
redis > config get maxmemory-policy

#获取Redis能使用的最大内存大小:如果不设置最大内存大小或者设置为0,在64位操作系统#下不限制内存大小,在32位操作系统下最多使用3G
redis > config get maxmemory

#通过命令设置淘汰策略
redis > config set maxmemory-policy volatile-lru

#设置Redis最大占用内存大小
redis > config set maxmemory 2048mb

  

 

redis提供6种数据淘汰策略(代码片段)

淘汰策略的原因在redis中,允许用户设置最大使用内存大小server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台8G机子上部署了4个redis服务点,每一个服务点分配1.5G的内存大小,减少内存紧张的情况,由此获取更为稳健... 查看详情

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

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

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

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

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用作缓存时,如果内存空间用满,就会自动驱逐老的数据。Redis中有6种淘汰策略:redis.conf文件中配置策略,有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的内存淘汰策略  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过期删除策略和内存淘汰策略有什么区别?(代码片段)

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

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

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

缓存数据库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内存淘汰策略

参考技术A当Redis内存超过最大允许的内存之后,Redis就会触发内存淘汰策略(阈值可配置)以双向链表存放被访问的key,每次被访问到的就会放入表头,表尾就是最少被访问的。LRU算法需要一个双向链表来记录数据的最近被访问顺... 查看详情

redis——内存淘汰策略

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

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

1、maxmemory-policynoeviction(默认):内存空间不足会报错2、allkeys-lru:最少使用的数据去淘汰3、allkeys-random:随机淘汰一些key4、volatile-random:在已经设置了过期的时间去随机淘汰   volatile-lru:在已经设置了过期的时间... 查看详情

redis之过期删除侧率

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

redis的过期策略都有哪些?内存淘汰机制都有哪些?

redis过期策略redis过期策略是:定期删除+惰性删除。所谓定期删除,指的是redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。假设redis里放了10w个key,都设置了过期时间,你每隔几百毫... 查看详情

redis内存淘汰机制

Redis内存淘汰指的是用户存储的一些键被可以被Redis主动地从实例中删除,从而产生读miss的情况,那么Redis为什么要有这种功能?这就是我们需要探究的设计初衷。Redis最常见的两种应用场景为缓存和持久存储,首先要明确的一个... 查看详情

redis配置过期自动删除策略

参考技术ARedis操作是基于内存的,大小有限。当内存不足或占用过高时,需要自动放弃一些未到期的数据Redis默认的生效的配置为noeviction,需要根据不同的业务选择不同的淘汰策略volatile-lru:在设置过期时间的数据集合里淘汰最... 查看详情

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

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