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

四猿外 四猿外     2022-12-28     245

关键词:

redis采用的是定期删除+惰性删除策略。

为什么不用定时删除策略?

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

定期删除+惰性删除是如何工作的呢?

定期删除,redis默认每个100ms检查,是否有过期的key,有过期key则删除。需要说明的是,redis不是每个100ms将所有的key检查一次,而是随机抽取进行检查(如果每隔100ms,全部key进行检查,redis岂不是卡死)。因此,如果只采用定期删除策略,会导致很多key到时间没有删除。

于是,惰性删除派上用场。也就是说在你获取某个key的时候,redis会检查一下,这个key如果设置了过期时间那么是否过期了?如果过期了此时就会删除。

采用定期删除+惰性删除就没其他问题了么?

不是的,如果定期删除没删除key。然后你也没即时去请求key,也就是说惰性删除也没生效。这样,redis的内存会越来越高。那么就应该采用内存淘汰机制。

在redis.conf中有一行配置

maxmemory-policy volatile-lru

该配置就是配内存淘汰策略的(什么,你没配过?好好反省一下自己)

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据,新写入操作会报错

ps:如果没有设置 expire 的key, 不满足先决条件(prerequisites); 那么 volatile-lru, volatile-random 和volatile-ttl 策略的行为, 和 noeviction(不删除) 基本上一致。

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

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

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

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

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

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

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

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

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

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

redis缓存何以一枝独秀?——聊聊redis的数据过期数据淘汰以及数据持久化的实现机制(代码片段)

...场景的支持,除了基础的缓存增删改查,还支持对记录的过期时间设定,支持多种不同的数据淘汰策略等等。此外为了解决内存型组件数据可靠性问题,还提供了一系列的数据持久化方案。本篇文章中,我们就一起聊一聊这方面... 查看详情

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

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

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

...一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF和RDB的过期删除策略二、REDIS的消耗及优化    2.1... 查看详情

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

...一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF和RDB的过期删除策略二、REDIS的消耗及优化    2.1... 查看详情

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

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

redis淘汰策略

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

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内存管理机制和实现(代码片段)

...,其内存管理是非常重要的。本文内存管理的内容包括:过期键的懒性删除和过期删除以及内存溢出控制策略。最大内存限制Redis使用maxmemory参数限制最大可用内存,默认值为0,表示无限制。限制内存的目的主要有:用于缓存场... 查看详情

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

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

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

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

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

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

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

...一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF和RDB的过期删除策略二、REDIS的消耗及优化    2.1... 查看详情

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

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