Redis的删除策略

在Redis中的数据删除策略有三种:定时删除、惰性删除、定期删除

定时删除

当key设置有过期时间,且过期时间到达时,立即执行key的删除操作

优点:节约内存,到时就删除,立即释放不必要的内存占用

缺点:CPU压力较大,无论CPU此时负载量多高,均占用CPU,会影响redis服务器响应时间和指令吞吐量

用处理器性能换取存储空间(时间换空间),适用于小内存,强CPU场景

惰性删除 (空间换时间)

数据到达过期时间,先不做处理。等下次访问该数据时,发现数据已过期,删除,给客户端返回不存在。

优点:节约CPU性能,发现不得不删除的时候才删除

缺点:内存空间压力很大,出现长期占用内存的数据

用存储空间换取处理器性能 (空间换时间),适用于大内存,弱CPU场景

定期删除

定期删除是以上两种方案的折中方案。(数据库轮询访问)

redis启动服务器初始化时,读取配置server.hz的值,默认为10

每秒执行server.hz次server.Cron() -> databasesCron() -> activeExpireCycle()

activeExpireCycle()对每个expires\*逐一进行检测,每次执行250ms/server.hz

对某个expires\*检测时,随机挑选w个key检测

如果key超时,删除key

如果一轮中删除的key数量>w*25%,循环该过程

如果一轮中删除的key数量<=w*25%,检查下一个expires*,0-15循环

w取值=active_expire_cycle_lookups_peer_loop属性值

参数current_db用于记录activeExpireCycle进入那个expires执行

如果activeExpireCycle执行时间到期,下次从current_db继续向下执行

总结:

周期性轮询Redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度

特点1:CPU性能占用设置有峰值,检测频度可自定义设置

特点2:内存压力不是很大,长期占用内存的数据会被持续清理

周期性抽查存储空间(随机抽查,重点抽查)

区别

定时删除 节约内存,无占用 不分时段占用CPU资源,频度高 拿时间换空间
惰性删除 内存占用严重 延时执行,CPU利用率高 拿空间换时间
定期删除 内存定期随机清理 每秒花费固定的CPU资源维护内存 随机抽查,重点抽查

逐出算法

**LRU:LRU算法的全称是Least Recently Used,即最近最少使用算法。**这是一种常用的页面置换算法,其基本思想是选择最近最久未使用的页面予以淘汰。在LRU算法中,通常使用哈希链表作为数据结构,以便按照数据的最后使用时间进行排序,从而决定哪些页面应该被替换掉

LFU:LFU算法的全称是Least Frequently Used,意思是最近最不常用。该算法通过比较数据的历史访问频率来决定哪些数据应该被淘汰,其核心思想是"如果数据过去被访问多次,那么将来被访问的频率也更高"

相关推荐
这个DBA有点耶13 小时前
同城双活落地的三座山:网络延迟、脑裂预防、反向同步
数据库·架构·dba
青春之我_XP13 小时前
MySQL 常用日期函数 实战指南
数据库·sql·mysql·数据分析·数据库开发·日期函数
Nturmoils13 小时前
sys_dump 备了库,角色和权限别漏在外面
数据库
接着奏乐接着舞。13 小时前
【2026】73道Redis 常见面试题与参考答案
数据库·redis·后端·缓存
其实防守也摸鱼15 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
人生百态,人生如梦15 小时前
每日论文解读(9.1)——ReToolSQL:面向鲁棒Text-to-SQL的Agentic强化学习与工具增强两阶段训练框架
数据库·sql
DevOpenClub15 小时前
网页采集如何稳定输出结构化数据:JSON、链接与快照三阶段流水线
数据库·json·api
其实防守也摸鱼15 小时前
免杀与持久化入门:从载荷免杀到隐蔽通道的完整指南
运维·服务器·数据库·安全·github·copilot·渗透
SelectDB15 小时前
统一全文检索与 SQL 分析:Apache Doris 日志分析实践
运维·数据库·掘金技术征文
麻瓜code16 小时前
【MySQL】SQL优化实战:从慢查询定位到查询改写
数据库·sql·mysql