当前位置:网站首页>Redis的三种删除策略以及逐出算法
Redis的三种删除策略以及逐出算法
2022-07-28 18:42:00 【我是一棵卷心菜】
大家好,我是卷心菜。本篇主要讲解Redis的三种删除策略以及逐出算法,如果您看完文章有所收获,可以三连支持博主哦~,嘻嘻。
一、前言
- 在文章开始之前,我先问大家一个问题:当我们使用指令:
expire key second给一个key设置过期时间,过期时间一到,这个key对应的过期数据真的被服务器立即删除了吗?答案是并不会立即删除。知道了这个答案,就来看看Redis中如何处理过期的数据。
二、Redis中的数据特征
- Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态,有三种状态:
| 指令结果 | 状态 |
|---|---|
| XX | 具有时效性的数据 |
| -1 | 永久有效的数据 |
| -2 | 已经过期的数据 或 被删除的数据 或 未定义的数据 |
三、时效性数据储存结构

当我们用指令设置过期数据后,数据对应的地址会放在expires空间中,存储方式是哈希,存储的value是过期时间。
四、、数据删除策略
数据删除策略目标:在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降,甚至引发服务器宕机或内存泄露
1、定时删除
- 创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作
- 优点:节约内存,到时就删除,快速释放掉不必要的内存占用
- 缺点:CPU压力很大,无论CPU此时负载量多高,均占用CPU,会影响redis服务器响应时间和指令吞吐量

2、惰性删除
- 数据到达过期时间,不做处理。等下次访问该数据时,会调用
expireIfNeeded()函数来判断该数据是否过期:
如果未过期,返回数据
发现已过期,删除,返回不存在 - 优点:节约CPU性能,发现必须删除的时候才删除
- 缺点:内存压力很大,出现长期占用内存的数据

3、定期删除

流程分析:
- Redis服务器启动初始化时,读取配置server.hz的值,默认为10
- 然后每秒钟执行10次
serverCron()方法,该方法用来检测服务器 serverCron()方法又会调用databasesCron()方法,该方法是用来遍历数据库的,redis默认有16个数据库,从第一个数据库开始databasesCron()方法又会调用activeExpireCycle()方法,该方法会对每一个expires[*]逐一进行检测,每次执行250ms/server.hz;对某个expires[*]检测时,随机挑选W个key检测- 如果检测到key超时,则删除key;如果一轮中删除的key的数量>W25%,循环该过程;如果一轮中删除的key的数量≤W25%,检查下一个
expires[*],0-15循环。其中W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值 - 如果activeExpireCycle()执行时间到期,下次从current_db继续向下执行
- 参数current_db用于记录activeExpireCycle() 进入哪个expires[*] 执行

总结:周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度- 内存压力不是很大,长期占用内存的冷数据会被持续清理
五、删除策略对比
| 定时删除 | 节约内存,无占用 | 不分时段占用CPU资源,频度高 | 拿时间换空间 |
|---|---|---|---|
| 惰性删除 | 内存占用严重 | 延时执行,CPU利用率高 | 拿空间换时间 |
| 定期删除 | 内存定期随机清理 | 每秒花费固定的CPU资源维护内存 | 随机抽查,重点抽查 |
六、逐出算法
1、概念引入
当新数据进入redis时,如果内存不足怎么办?Redis使用内存存储数据,在执行每一个命令前,会调用freeMemoryIfNeeded()检测内存是否充足。如果内存不满足新加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理存储空间。清理数据的策略称为逐出算法。
注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间,如果不成功则反复执行。当对所有数据尝试完毕后,如果不能达到内存清理的要求,将出现错误信息。
2、八种配置
- 检测易失数据(
可能会过期的数据集server.db[i].expires)
| volatile-lru | 挑选最近最少使用的数据淘汰 |
|---|---|
| volatile-lfu | 挑选最近使用次数最少的数据淘汰 |
| volatile-ttl | 挑选将要过期的数据淘汰 |
| volatile-random | 任意选择数据淘汰 |
- 检测全库数据(
所有数据集server.db[i].dict)
| allkeys-lru | 挑选最近最少使用的数据淘汰 |
|---|---|
| allkeys-lfu | 挑选最近使用次数最少的数据淘汰 |
| allkeys-random | 任意选择数据淘汰 |
- 放弃数据驱逐
| no-enviction | 禁止驱逐数据(redis4.0中默认策略) |
|---|
感谢阅读,一起进步,嘻嘻~
边栏推荐
- js飞入js特效弹窗登录框
- Unity package project to vs deploy hololens process summary
- User, user group related operations
- [task02: SQL basic query and sorting]
- TCP.IP
- File lookup and file permissions
- Mongoose condition queries the data of a certain time period
- Character device drive structure
- CNN convolution neural network learning process (weight update)
- UE4.25 Slate源码解读
猜你喜欢
![[task02: SQL basic query and sorting]](/img/10/c2a936c882cd77f422396840282ed5.png)
[task02: SQL basic query and sorting]

Unity makes prefabricated bodies with one key and modifies prefabricated bodies with one key

Unity gets which button (toggle) is selected under togglegroup

Explain the life cycle function in unity in detail

产品力大幅提升 新款福特探险者发布

Extract China map from global.Nc data and calculate regional CO2 value based on acgis

leetcode:2141. 同时运行 N 台电脑的最长时间【最值考虑二分】

【pytorch】LSTM神经网络

js网页黑白背景开关js特效
![[task03: complex query methods - views, subqueries, functions, etc.]](/img/83/2cad48016199b079aca0251b7b4ee8.png)
[task03: complex query methods - views, subqueries, functions, etc.]
随机推荐
Mysql报错:Specified key was too long; max key length is 767 bytes
[C语言刷题篇]链表运用讲解
User and group and authority management
华为云数字资产链,“链”接数字经济无限精彩
[task01: getting familiar with database and SQL]
js可拖拽alert弹窗插件
User, user group related operations
Linxu 【基本指令】
【CodeForces】Educational Codeforces Round 132 (Rated for Div. 2)
[POC - proof of concept]
Unity uses shader to quickly make a circular mask
Configure Windows Server + install MySQL database on the server + Remote Access database
Regular symbol description
h5微信射击小游戏源码
Yum package management
The product power is greatly improved, and the new Ford Explorer is released
想画一张版权属于你的图吗?AI作画,你也可以
Gru neural network
Raspberry pie 4B uses MNN to deploy yolov5 Lite
[fasttext -- Summary notes]