【Redis】搞懂过期删除策略和内存淘汰策略

Redis键过期背后的秘密:TTL返回-1、-2、0分别代表什么?一次搞懂内存回收机制 本文深入解析Redis键过期机制中TTL命令返回的-1、-2、0等状态码的具体含义,揭示Redis内存回收的核心原理。通过惰性删除与定期删除的双重策略分析,结合实战案例演示如何排查TTL异常问题,帮助开发者优化Redis内存管理并提升系统性能。 阅读详情

1、过期删除策略

1.1、介绍

Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。

每当我们对一个 key 设置了过期时间时,Redis 会把该 key 带上过期时间存储到一个过期字典(expires dict)中,也就是说过期字典保存了数据库中所有 key 的过期时间。

字典实际上是哈希表,哈希表的最大好处就是让我们可以用 O(1) 的时间复杂度来快速查找。当我们查询一个 key 时,Redis 首先检查该 key 是否存在于过期字典中:

  • 如果不在,则正常读取键值;
  • 如果存在,则会获取该 key 的过期时间,然后与当前系统时间进行比对,如果比系统时间大,那就没有过期,否则判定该 key 已过期。

1.2、定时删除策略

定时删除策略(TTL)的做法是,在设置 key 的过期时间时,同时创建一个定时事件,当时间到达时,由事件处理器自动执行 key 的删除操作。

  • 优点:可以保证过期 key 会被尽快删除,也就是内存可以被尽快地释放。因此,定时删除对内存是最友好的;
  • 缺点:在过期 key 比较多的情况下,删除过期 key 可能会占用相当一部分 CPU 时间,在内存不紧张但 CPU 时间紧张的情况下,将 CPU 时间用于删除和当前任务无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响。所以,定时删除策略对 CPU 不友好。

1.3、惰性删除策略

惰性删除策略(Lazy Expire)的做法是,不主动删除过期键,每次从数据库访问 key 时,都检测 key 是否过期,如果过期则删除该 key。

  • 优点:因为每次访问时,才会检查 key 是否过期,所以此策略只会使用很少的系统资源,因此,惰性删除策略对 CPU 时间最友好;
  • 缺点:如果一个 key 已经过期,而这个 key 又仍然保留在数据库中,那么只要这个过期key 一直没有被访问,它所占用的内存就不会释放,造成了一定的内存空间浪费。所以,惰性删除策略对内存不友好。

1.4、定期删除策略

定期删除策略(Eviction)的做法是,每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查,并删除其中的过期key。

  • 优点:通过限制删除操作执行的时长和频率,来减少删除操作对 CPU 的影响,同时也能删除一部分过期的数据减少了过期键对空间的无效占用;
  • 缺点:内存清理方面没有定时删除效果好,同时没有惰性删除使用的系统资源少,是一个折中的策略;
  • 缺点:难以确定删除操作执行的时长和频率。如果执行的太频繁,定期删除策略变得和定时删除策略一样,对CPU不友好;如果执行的太少,那又和惰性删除一样了,过期 key 占用的内存不会及时得到释放。

1.5、三者区别

1.6、Redis实现

Redis使用的过期删除策略是「惰性删除+定期删除」这两种策略配和使用,以求在合理使用 CPU 时间和避免内存浪费之间取得平衡。

Redis 的惰性删除策略由 db.c 文件中的 expireIfNeeded 函数实现,Redis 在访问或者修改 key 之前,都会调用 expireIfNeeded 函数对其进行检查,检查 key 是否过期:

  • 如果过期,则删除该 key,至于选择异步删除,还是选择同步删除,根据 lazyfree_lazy_expire 参数配置决定(Redis 4.0版本开始提供参数),然后返回 null 客户端;
  • 如果没有过期,不做任何处理,然后返回正常的键值对给客户端;

再回忆一下,定期删除策略的做法:每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查,并删除其中的过期key。

在 Redis 中,默认每秒进行10次过期检查一次数据库,此配置可通过 Redis 的配置文件 redis.conf 进行配置,配置键为 hz,它的默认值是 hz 10。

值得注意的是,每次检查数据库并不是遍历过期字典中的所有key,而是从数据库中随机抽取一定数量的 key 进行过期检查。这个一定数量在源码中是写死的,并未提供对应的参数进行自定义配置,数值固定为20。

Redis 为了保证定期删除不会出现循环过度,导致线程卡死现象,为此增加了定期删除循环流程的时间上限,默认不会超过25ms。

1.7、持久化时过期键处理

Redis 持久化文件有两种格式:RDB(Redis Database)和 AOF(Append Only File),下面我们分别来看过期键在这两种格式中的呈现状态。

RDB 文件分为两个阶段,RDB 文件生成阶段和加载阶段:

  • 「RDB 文件生成阶段」从内存状态持久化成 RDB(文件)的时候,会对 key 进行过期检查,过期的键不会被保存到新的 RDB 文件中,因此 Redis 中的过期键不会对生成新RDB 文件产生任何影响;

  • 「RDB 加载阶段」如果 Redis 是主服务器运行模式的话,在载入 RDB 文件时,程序会对文件中保存的键进行过期检查,过期键不会被载入到数据库中。所以过期键不会对载入RDB 文件的主服务器造成影响;

  • 「RDB 加载阶段」如果 Redis 是从服务器运行模式的话,在载入 RDB 文件时,不论键是否过期都会被载入到数据库中。但由于主从服务器在进行数据同步时,从服务器的数据会被清空。所以一般来说,过期键对载入 RDB 文件的从服务器也不会造成影响。

AOF 文件分为两个阶段,AOF 文件写入阶段和重写阶段。

  • 「AOF 文件写入阶段」当 Redis 以 AOF 模式持久化时,如果数据库某个过期键还没被删除,那么 AOF 文件会保留此过期键,当此过期键被删除后,Redis 会向 AOF 文件追加一条 DEL 命令来显式地删除该键值;
  • 「AOF 重写阶段」执行 AOF 重写时,会对 Redis 中的键值对进行过期检查,已过期的键不会被保存到重写后的 AOF 文件中,因此不会对 AOF 重写造成任何影响。

1.8、主从模式过期键处理

当 Redis 运行在主从模式下时,从库不会进行过期扫描,从库对过期的处理是被动的。也就是即使从库中的 key 过期了,如果有客户端访问从库时,依然可以得到 key 对应的值,像未过期的键值对一样返回。

从库的过期键处理依靠主服务器控制,主库在 key 到期时,会在 AOF 文件里增加一条 del 指令,同步到所有的从库,从库通过执行这条 del 指令来删除过期的 key。

2、内存淘汰机制

2.1、介绍

Redis的内存淘汰机制是为了解决内存占用过高的问题。

在 Redis 的运行内存达到了某个阀值,就会触发内存淘汰机制,根据一定的策略来选择一些键值对进行删除,从而释放部分内存。

这个阀值就是我们设置的最大运行内存,此值在 Redis 的配置文件中可以找到,配置项为maxmemory。

常见的内存淘汰策略有:

  1. LRU(Least Recently Used,最近最少使用):淘汰整个键值中最久未使用的键值;
  2. LFU(Least Frequently Used,最不经常使用):淘汰整个键值中最少使用的键
    值;
  3. Random(随机):随机选择键值对进行淘汰。
  4. noeviction(不进行数据淘汰):Redis3.0之后,默认的内存淘汰策略。它表示当运行内存超过最大设置内存时,不淘汰任何数据,而是不再提供服务,直接返回错误。

虽然虽然,但是后面就不介绍后两个策略了,主要介绍前两个策略:

  • 随机策略:想介绍也没东西介绍,就随缘抓几个起来噶掉这玩意
  • 不进行数据淘汰策略:想介绍也没东西介绍,就直接把门关了这玩意

2.2、LRU

LRU(Least Recently Used,最近最少使用)是Redis3.0之前默认的内存淘汰策略,它是淘汰整个键值中最久未使用的键值。

传统 LRU 算法的实现是基于「链表」结构,链表中的元素按照操作顺序从前往后排列,最新操作的键会被移动到表头,当需要内存淘汰时,只需要删除链表尾部的元素即可,因为链表尾部的元素就代表最久未被使用的元素。

Redis 并没有使用这样的方式实现 LRU 算法,因为传统的 LRU 算法存在两个问题:

  • 需要用链表管理所有的缓存数据,这会带来额外的空间开销;
  • 当有数据被访问时,需要在链表上把该数据移动到头端,如果有大量数据被访问,就会带来很多链表移动操作,会很耗时,进而会降低 Redis 缓存性能。

Redis 实现的是一种近似 LRU 算法,目的是为了更好的节约内存,它的实现方式是在 Redis 的对象结构体中添加一个额外的字段,用于记录此数据的最后一次访问时间。

当 Redis 进行内存淘汰时,会使用随机采样的方式来淘汰数据,它是默认随机取 5 个值(此值可配置),然后淘汰最久没有使用的那个。

Redis 实现的 LRU 算法的优点:

  • 不用为所有的数据维护一个大链表,节省了空间占用;
  • 不用在每次数据访问时都移动链表项,提升了缓存的性能;

但是 LRU 算法有一个问题,由于是随机采样的方式来淘汰数据,因此无法解决缓存污染问题。

比如应用一次读取了大量的数据,而这些数据只会被读取这一次,如果运气炸裂每次随机采样都采不到它们,那么这些数据会留存在 Redis 缓存中很长一段时间,造成缓存污染。

2.3、LFU

LFU 全称是 Least Frequently Used 翻译为最近最不常用的,是在Redis4.0新增的一种内存淘汰策略。

LFU 算法是根据数据访问次数来淘汰数据的,它的核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。

其实严格来说,LFU算法是根据数据访问频率来淘汰数据的。

所以, LFU 算法会记录每个数据的访问次数。当一个数据被再次访问时,就会增加该数据的访问次数。这样就解决了偶尔被访问一次之后,数据留存在缓存中很长一段时间的问题,相比于 LRU 算法也更合理一些。

LFU 算法相比于 LRU 算法的实现,多记录了「数据的访问频次」的信息。Redis 对象的结构如下:

typedef struct redisObject {
   ...
      
    // 24 bits,用于记录对象的访问信息
    unsigned lru:24;  
   ...
} robj;

Redis 对象头中的 lru 字段,在 LRU 算法下和 LFU 算法下使用方式并不相同。

在 LRU 算法中,Redis 对象头的 24 bits 的 lru 字段是用来记录 key 的访问时间戳,因此在 LRU 模式下,Redis可以根据对象头中的 lru 字段记录的值,来比较最后一次 key 的访问时间长,从而淘汰最久未被使用的 key。

在 LFU 算法中,Redis对象头的 24 bits 的 lru 字段被分成两段来存储, 高16bit存储 ldt (Last Decrement Time), 低8bit 存储 logc (Logistic Counter):

  • ldt 是用来记录 key 的访问时间戳;
  • logc 是用来记录 key 的访问频次,它的值越小表示使用频率越低,越容易淘汰,每个新加入的 key 的logc 初始值为 5。

注意, logc 并不是单纯的访问次数,而是访问频次(访问频率),因为 logc 会随时间推移而衰减的。

在每次 key 被访问时,会先对 logc 做一个衰减操作,衰减的值跟前后访问时间的差距有关系.如果上一次访问的时间与这一次访问的时间差距很大,那么衰减的值就越大,这样实现的 LFU 算法是根据访问频率来淘汰数据的,而不只是访问次数。

访问频率需要考虑 key 的访问是多长时间段内发生的。key 的先前访问距离当前时间越长,那么这个 key 的访问频率相应地也就会降低,这样被淘汰的概率也会更大。

对 logc 做完衰减操作后,就开始对 logc 进行增加操作,增加操作并不是单纯的自增,而是根据概率增加,如果 logc 越大的 key,它的 logc 就越难再增加。

所以,Redis 在访问 key 时,对于 logc 是这样变化的:

  1. 先按照上次访问距离当前的时长,来对 logc 进行衰减;
  2. 然后,再按照一定概率增加 logc 的值

redis.conf 提供了两个配置项,用于调整 LFU 算法从而控制 logc 的增长和衰减:

  • lfu-decay-time 用于调整 logc 的衰减速度,它是一个以分钟为单位的数值,默认值为1, lfu-decay-time 值越大,衰减越慢;
  • lfu-log-factor 用于调整 logc 的增长速度, lfu-log-factor 值越大,logc 增长越慢。

2.4、区别

3、区分过期删除和内存淘汰

内存淘汰机制:

  • 当 Redis 的内存使用达到配置的最大内存限制时,内存淘汰机制会根据预先设置的策略来删除一些键值对,以释放内存空间。
  • 内存淘汰机制并不关心键是否设置了过期时间,它主要根据某种算法选择要淘汰的键值对,以腾出更多的内存空间,使得新的键值对可以被存储在内存中。
  • 常见的内存淘汰策略有 LRU(最近最少使用)、LFU(最不经常使用)、随机等。

过期删除机制:

  • Redis 允许为键设置过期时间,过期删除机制是在键设置了过期时间后,当键过期时自动将其删除。
  • 过期删除机制并不是为了释放内存,而是为了使 Redis 中的数据始终保持最新的状态。
  • 过期的键值对将不再对外提供服务,直到下次有读或写操作访问该键时,Redis 会发现键已经过期,然后将其删除。

复现CVE-2014-085(Apache ZooKeeper 未授权访问漏洞) 默认安装配置完的zookeeper允许未授权访问,管理员未配置访问控制列表(ACL)。导致攻击者可以在默认开放的2181端口下通过执行envi命令获得大量敏感信息(系统名称、java环境)导致任意用户可以在网络不受限的情况下进行未授权访问读取数据。 阅读详情

相关推荐

PID控制器(位置式和增量式)

PID控制算法

zhinian_hao的博客 4512

Redis 的内存淘汰策略和过期删除策略,你别再搞混了!

大家好,我是小林。 Redis 的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都是做删除的操作,但是触发的条件和使用的策略都是不同的。 今天就跟大家理一理,「内存淘汰策略」和「过期删除策略」。 发车! 过期删除策略 Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。 如何设置过期时间? 先说一下对 key 设置过期时间的命令。设置 key 过期时间的命令一共有 4 个: expire ...

java_beautiful的博客 877

保姆级教程:手把手教你用RKISP TURN为RV1106生成和配置IQfile(附AIQ版本匹配避坑指南)

本文提供RV1106 ISP调试的完整指南,详细讲解如何使用RKISP TURN工具生成和配置IQfile,包括环境搭建、参数调试、设备树配置及常见问题解决方案。特别强调AIQ版本匹配的重要性,帮助开发者避免常见陷阱,提升图像信号处理效率。

weixin_42520796的博客 489

一文彻底搞懂Redis的内存回收机制和内存过期淘汰策略

Redis 的内存回收主要由两部分组成: Redis过期策略:删除过期时间的key值 Redis淘汰策略:内存使用到达maxmemory上限时触发内存淘汰数据

永远在路上 3230

经典烧脑算法逻辑题--高楼扔鸡蛋:最少次数测出鸡蛋摔碎临界点。

如果在第2层没碎,换到第3层扔.......如果第59层没碎,换到第60层扔;有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。比如鸡蛋在第9层没有摔碎,在第10层摔碎了,那么鸡蛋不会摔碎的临界点就是9层。因此,我们尝试每10层扔一次,第一次从10层扔,第二次从20层扔,第三次从30层......一直扔到100层。如果第一枚鸡蛋,在50层碎了,第二枚鸡蛋,就从第1层开始扔,一层一层增长,一直扔到第49层。如果第一枚鸡蛋在50层没碎了,则继续使用二分法,在剩余楼层的一半(75层)往下扔。

借雨醉东风的博客 1817

kettle从入门到精通 第九十二课 ETL之kettle 使用Kettle的Carte对外发布读写接口

场景:使用kettle实现将查询结果返回给客户端,也就是说kettle暴露查询接口供外围系统调用。前提必须是使用carte服务才可以提供接口供外部系统调用。具体实操方法如下:1、设计转换根据具体需求设计转换,主要用到的步骤有获取变量(从请求参数中获取变量)、json输入(解析入参),json 输出将结果转换为json格式输出到客户端。如下图所示:2、接收参数使用获取变量步骤来接收接口请求参数,变量通过${}方法进行获取,如下图${PARAM}则是获取PARAM参数,将参数赋值为req字段。

zhangjin1222的博客 954

全面整理Redis过期删除与内存淘汰策略底层原理机制

Redis通过过期删除策略和内存淘汰策略平衡CPU与内存资源。采用惰性删除+定期删除的组合策略,既避免CPU过载又减少内存浪费。当内存超限时,提供8种淘汰策略(包括LRU/LFU算法)进行数据清理。主从模式下由主库控制过期键删除,保证数据一致性。持久化时RDB文件会过滤过期键,AOF则通过DEL指令标记删除。这些机制共同保障Redis的高效运行,开发者需要根据业务场景合理配置相关参数。

795

学Simulink——基于新型动力与推进系统的场景实例:混合动力无人机的续航能力优化

通过本次 Simulink 仿真,你已掌握:✅混合动力系统架构设计✅内燃机、电机、电池联合建模✅三种能量管理策略(规则型、功率跟随、优化型)✅续航能力仿真与对比分析✅参数调优与优化方法核心收获混合动力是突破续航瓶颈的有效路径能量管理策略(EMS)决定系统效率电池SOC管理是关键Simulink 支持复杂多能源系统的协同仿真掌握混合动力无人机技术,你将具备设计长航时巡检机、应急通信平台、边境巡逻系统的能力。

xiaoheshang_123的博客 100

Redis100篇 - Redis Key突然消失 过期+淘汰策略排查

Redis Key消失排查指南 问题现象: 写入的Redis Key突然消失 内存未满但Key被清除 业务出现缓存穿透 核心原因: Key过期机制: TTL到期自动删除 采用惰性删除+定期删除策略 常见错误:TTL单位混淆、覆盖写入未带TTL、主从同步延迟 内存淘汰机制: 当内存达到maxmemory时触发 8种淘汰策略(如allkeys-lru/volatile-ttl) 未设置maxmemory可能导致OOM 排查步骤: 检查Key的TTL:TTL key_name 确认淘汰策略:CONFIG GET

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

SIMULINK开发项目实例 1000 例专栏之第912例--AC-DC整流器场景:基于PWM整流器拓扑结构的建模:三相电压型PWM整流器(SR)单位功率因数控制仿真

本文详细介绍了使用Simulink和Simscape Electrical搭建三相电压型PWM整流器(VSR)模型的方法。主要内容包括:系统结构设计、主电路拓扑搭建、单位功率因数控制算法实现(含PLL锁相环、dq变换、PI控制器等模块)、参数配置和仿真设置。通过仿真分析验证了该系统能实现输入电流与电压同相位、输出直流电压稳定等特性,体现了PWM整流器的高效性和低谐波优势。文章还提出了增强鲁棒性、多工况测试等优化建议,为电力电子系统设计提供了实用指导。该建模方法对新能源发电、电动汽车充电等领域具有重要意义。

xiaoheshang_123的博客 7796

高效与灵活相结合:Verilog编写的跨时钟域循环缓冲控制器解析

循环缓冲区,也被称作循环队列、环形缓冲区,是一种数据结构,其主要特性是使用一个固定大小的缓冲区作为数据的存储空间,这个缓冲区在逻辑上被视作是首尾相接的。虽然Verilog是一种常用的硬件描述语言,被广泛应用在FPGA和ASIC设计中,但是在描述循环缓冲区时,它并没有提供一种直接且灵活的方式来指定循环缓冲区的参数,如字长、缓冲区深度、缓冲区数量等。这给硬件设计带来了一定的不便。同时,该控制器的设计也充分考虑了硬件资源的利用率,通过优化的算法和数据结构,使得在实现高性能的同时,也能够有效地节省硬件资源。

qq_38334677的博客 1220

【Redis】深入理解Redis过期策略与内存淘汰策略:从原理到实战

本文深入探讨Redis运维中的两大核心问题:过期数据管理与内存溢出控制。Redis采用"定期删除+惰性删除"的混合过期策略,平衡CPU资源消耗与内存利用率;当内存达到上限时,提供8种内存淘汰策略(如LRU/LFU)释放空间。文章详细分析各策略原理及适用场景,并针对不同业务场景(如通用缓存、核心数据存储等)给出配置建议,帮助开发者合理选择策略组合,在保证数据可靠性的同时优化Redis性能与内存效率。

专注分享Java 核心进阶、全栈架构实战、AI 工具链落地干货,用技术视角拆解编程效率与创意生成的底层逻辑 。 1034

剪映专业版关键帧完全教程:从原理到实战的动画必修课

关键帧是视频动画的核心原理。视频由连续静止画面(帧)构成,关键帧记录素材属性变化的起始与结束状态,中间过渡帧由软件自动计算生成。剪映专业版中,视频、音频、文本、贴纸等素材均支持关键帧动画,可调节位置、缩放、旋转、不透明度、音量等参数。操作为:在起始位置点击参数旁菱形按钮添加关键帧,移动播放头后调整参数,系统自动生成第二个关键帧。多属性可独立控制并叠加,实现放大同时淡出等复合效果。通过设定变化起点与终点,关键帧能让静止元素产生移动、缩放、淡入淡出等丰富动态,是视频剪辑从基础拼接进阶创意表达的核心技能。掌握关键

深耕计算机专业知识与技术。 2083

Redis过期删除与内存淘汰策略详解

Redis采用惰性删除+定期删除组合策略管理过期键,定期随机抽样检查过期键并清理。当内存达到上限时,Redis提供8种内存淘汰策略,包括不淘汰(noeviction)、随机淘汰(allkeys-random)、LRU(allkeys-lru)和LFU(allkeys-lfu)等。LRU基于最近访问时间淘汰,LFU基于访问频率淘汰。生产环境建议设置maxmemory并选择合适策略,如通用场景推荐allkeys-lru,热点场景用allkeys-lfu。通过合理配置这两大机制,可有效平衡内存使用和系统性能。

qq_33665793的博客 859

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

一篇带你搞懂Redis过期策略和内存淘汰策略

讲讲Redis的过期删除策略和内存淘汰策略

weixin_46739493的博客 275

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

清除redis缓存命令_一文搞懂Redis缓存的三大策略(过期、内存淘汰、删除)

作为社会主义接班人,我们在项目中避免不了要使用Redis来做缓存。Redis简单易上手,用起来那是相当的可以。但是基于内存的Redis,使用成本也是相当的可以。我们在使用的时候有没有想过:使用过程中内存不够了会怎么样?我们能怎么做?Redis会怎么做?故,吾等须知其过期策略、内存淘汰策略、删除策略过期策略FIFO (First In First Out)先进先出原则最先进入的缓存数据在缓...

weixin_39723102的博客 1600

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Redis内存淘汰策略全攻略:从原理到实战,一篇搞懂怎么选!

Redis 的内存淘汰策略用于当内存使用达到预设上限(maxmemory)时,决定哪些数据需要被删除以释放内存。合理选择淘汰策略可以平衡内存利用率和业务需求(如缓存命中率、数据持久化等)。

weixin_42148384的博客 1144

Redis过期策略:一篇让小白彻底搞懂核心面试题

Redis采用惰性删除和定期删除相结合的过期策略,不会立即删除过期key。内存满时通过8种淘汰策略(如allkeys-lru)清理数据。为避免缓存雪崩,建议给过期时间添加随机值。生产环境需设置maxmemory并选择合适的淘汰策略,同时监控内存使用情况。本文提供了配置示例和面试回答模板,帮助开发者掌握Redis的过期机制和内存管理技巧。

小坏说Java,一个专注Java微服务架构的实战,Java全栈教程,SpringBoot, SpringCloud微服务到分布式、高并发架构,大数据开发,运维实战,K8S、Docker容器为一体的教程,结合企业级内部的技术栈学习 800

带你搞懂 Redis 中的两个策略

面试的时候问到候选人 Redis 相关问题时,发现一个现象:一部分候选人分不清 Redis 的「键过期策略」和「内存淘汰策略」。今天就来说一说这老哥俩。 简单来说,过期策略就是当 key 到了指定的过期时间后,Redis 是用什么方式将其删除的;而淘汰策略指的是当内存不够用时,Redis 如何处理。 过期策略 Redis 的键过期方式有两种:被动和主动。 **被动方式:**当客户端尝试访问某个过期 key 时,Redis 发现该 key 已过期,将其删除。 **主动方式:**为每个设置了过期时间的 key.

纸上得来终觉浅,绝知此事要躬行 9439

Redis 过期与淘汰策略深度解析:从原理到 Spring Boot 实战,彻底搞懂内存管理机制!

Redis内存管理核心机制解析:本文深入讲解Redis的过期策略与内存淘汰策略。过期策略采用惰性删除+定期删除双机制,确保过期数据清理;内存淘汰策略则在内存不足时触发,提供8种可选规则(如LRU/LFU)。文章结合SpringBoot实战,给出生产环境配置建议:必须设置maxmemory,推荐allkeys-lru策略,并监控关键指标。同时解答常见问题,如"为什么过期key还能查到",帮助开发者避免内存泄漏和OOM问题,实现Redis高效内存管理。

qq_45202803的博客 514

Redis 从入门到精通:内存管理与淘汰策略

Redis内存管理三核心:过期清理、淘汰策略与优化技巧 本文深入解析Redis内存管理的三大关键机制:1)过期键清理采用惰性删除+定期删除的混合策略,平衡性能与内存效率;2)内存满时的八大淘汰策略对比(推荐allkeys-lru/lfu),通过Python实验演示不同策略效果;3)五大内存优化技巧,包括使用Hash结构、短键名、合理TTL等,实测Hash可比String节省3倍内存。文章提供可落地的Python代码示例,帮助开发者实现生产级Redis内存管理。

IT策士的博客 355

Redis 核心机制:数据过期策略与淘汰策略深度解析

Redis内存管理核心机制解析:过期策略与淘汰策略 本文深入剖析Redis内存管理的两大核心机制:数据过期策略和淘汰策略。过期策略采用定期删除+惰性删除的组合方式,并设计了fast/slow双模式应对不同场景,在CPU和内存利用率间取得平衡。淘汰策略提供8种算法,包括LRU、LFU等,当内存达到阈值时按规则删除数据。文章详细解析了各种策略的原理、实现细节及适用场景,并给出线上最佳实践建议:合理设置过期时间、避免大批量key同时过期、选择适合业务的淘汰策略等。

2401_88151415的博客 695

Redis 内存管理深度解析:过期删除与内存淘汰策略

Redis内存管理机制深度解析:从配置到淘汰策略 本文全面剖析Redis内存管理机制,涵盖内存上限配置、过期键删除策略和内存淘汰策略三大核心模块。Redis通过maxmemory参数设置内存上限,建议配置为物理内存的3/4。过期键删除采用"定期删除+惰性删除"组合策略,平衡CPU与内存使用。内存淘汰策略分为四大类:拒绝写入(noeviction)、随机淘汰、基于TTL淘汰和基于访问频率的LRU/LFU淘汰。重点解析了LFU算法的实现细节,包括16位时间戳和8位对数计数器的设计,以及访问频率衰减机制。文章为R

weixin_54574094的博客 594

一文搞懂 Redis 过期删除与内存淘汰:把它想成一家 24 小时便利店

本文把 Redis 想成一家货架有限的 24 小时便利店,用临期商品、店员巡检和货架腾挪解释 TTL、主动/被动过期、maxmemory 与 LRU、LFU、LRM 等淘汰策略,并通过 redis-cli 和 Java 实验展示如何选型与监控。

lvhao123456789的博客 356

深入剖析Redis删除策略:不止于惰性与定期

即便有“惰性删除”和“定期删除”双剑合璧,仍然可能出现内存不足的情况。比如,积累了大量从未被巡检到、也从未被访问的“僵尸键”,或者业务数据确实超出了物理内存。这时,Redis的内存淘汰机制(Eviction Policy)就会作为最后一道防线被触发。当Redis使用的内存达到maxmemory参数配置的上限时,会根据配置的策略来决定如何回收内存。策略适用范围机制适用场景noeviction所有Key默认策略。不删除,写命令返回错误。数据不允许丢失,可接受写失败。所有Key使用LRU算法淘汰。

用文字记录技术,用分享回馈社区,用坚持见证成长 1059

【万字长文】带你搞懂Redis中的所有知识点

本文详细讲述了Redis中所有的知识点,包括:性能、数据结构、持久化、过期策略、内存淘汰策略、集群部署、数据复制、高可用等内容

1_5_2_的博客 1049
上一篇: 一个例子了解如何编写可维护的Python代码
下一篇: 猴子吃桃:玩转二分思维
海哥python
博客等级 码龄9年 1487粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海哥python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值