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

windpoplar windpoplar     2022-12-13     370

关键词:

redis 过期策略

redis 过期策略是:定期删除+惰性删除。

所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。

假设 redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上了。注意,这里可不是每隔 100ms 就遍历所有的设置过期时间的 key,那样就是一场性能上的灾难。实际上 redis 是每隔 100ms 随机抽取一些 key 来检查和删除的。

但是问题是,定期删除可能会导致很多过期 key 到了时间并没有被删除掉,那咋整呢?所以就是惰性删除了。这就是说,在你获取某个 key 的时候,redis 会检查一下 ,这个 key 如果设置了过期时间那么是否过期了?如果过期了此时就会删除,不会给你返回任何东西。

获取 key 的时候,如果此时 key 已经过期,就删除,不会返回任何东西。

但是实际上这还是有问题的,如果定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?如果大量过期 key 堆积在内存里,导致 redis 内存块耗尽了,咋整?

答案是:走内存淘汰机制。

内存淘汰机制

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

  • noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧,实在是太恶心了。
  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)。
  • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的 key 给干掉啊。
  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key(这个一般不太合适)。
  • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。
  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。

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

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

redis之过期删除侧率

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

面试题1:redis的内存淘汰机制

...是redis的内存淘汰机制。我们要知道解决内存淘汰的算法都有哪些,以及redis中是如何实现的相关 查看详情

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

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

19年bat面试题汇总

...自的优缺点?9、Redis常见性能问题和解决方案:10、redis过期键的删除策略?11、Redis的回收策略(淘汰策略)?12、为什么edis需要把所有数据放到内存中?13、Redis的同步机制了解么?14、Pipeline有什么好处,为什么要用pipeline?15、... 查看详情

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

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

redis淘汰策略

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

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

...maxmemory的选项,假如redis内存使用达到上限2.没有加上过期时 查看详情

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

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

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

...:Java廖志伟🍊社区:幕后大佬文章目录Redis过期策略惰性删除流程定期删除流程内存淘汰机制RDB对过期key的处理AOF对过期key的处理本文内容:Redis过期策略Redis采用的过期策略惰性删除+定期删除惰性删除流程在... 查看详情

2021-05-14redis面试题redis的内存淘汰策略有哪些?

...数据时,在键空间中,随机移除某个key。2、设置过期时间的键空间选择性移除volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。volatile-random:当内存不... 查看详情

菜鸟刷面试题(redis篇)

...redis分布式锁有什么缺陷?redis如何做内存优化?redis淘汰策略有哪些?redis常见的性能问题有哪些?该如何解决?redis是什么?都有哪些使用场景?1、Redis是一款开源的、基于C语言编写的keyvalue数据库,其数据读写基于内存,性... 查看详情

redis常见的面试题,既是面试题也是知识点

...型,以及每种数据类型的使用场景,Redis内部结构redis的过期策略以及内存淘汰机制【~】Redis为什么是单线程的,优点如何解决redis的并发竞争key问题Redis集群方案应该怎么做?都有哪些方案?有没有尝试进行多机redis的部署?如... 查看详情

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

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

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

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

redis个人笔记

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

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

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

memcache与redis的区别都有哪些?

1、存储方式Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。Redis有部份存在硬盘上,这样能保证数据的持久性。2、数据支持类型Memcache对数据类型支持相对简单。Redis有复杂的数据类型。3、... 查看详情