Redis从入门到精通(16)redis的删除策略详解

Redis删除策略 删除策略 过期数据 ​ Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态: XX:具有时效性的数据 -1:永久有效的数据 -2:已经过期的数据或被删除的数据或未定义的数据 时效性数据的存储结构 删除策略是对expires的维护。 删除数据的策略 定时删除 ​ 创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作。 当前时间和expires中对过期时间一致时,定时器触发删除。 ​ 优点:节省内存,到时间就删除, 阅读详情

redis的数据都是保存在内存中,但是内存大小是有限的,所以这一节来看看redis中过期数据的删除,以及内存占用满以后新数据的插入问题。

过期数据

在内存中有专门的一块区域用来记录key的地址和过期时间,暂且叫做过期时间表。如果key有过期时间就会被放进这个表。

不过一个key过期了,redis为了提升性能,并不会马上将这个过期的key从内存删除,毕竟删除key也是会消耗cpu影响整体性能的。一方面是删除key节约内存,另一方面是保留key节约cpu,为了找到CPU和内存使用的一个平衡点,就有了不同的数据删除策略。

数据删除策略

定时删除

key一旦到达过期时间就被删除,CPU占用高,会影响redis服务器响应时间和指令吞吐量。用CPU换内存,拿时间换空间,适合CPU不太紧张而数据量较大的场景。

惰性删除

过期的时候不直接处理,等到下次访问该数据时再删除。内存压力比较大,会出现长期占用内存的旧数据。用内存换CPU,空间换时间,适合数据量不是很大但是CPU压力较大的场景。

定期删除

但是前面两者都太极端,还有一种中庸的方法。

info server命令可以查询一个叫做hz的配置值,默认是10,表示每秒钟执行10次轮询操作,最终操作的函数是activeExpireCycle(),该函数会对所有的db逐一检测过期时间表。轮询的时候会随机挑选W个key检测过期时间,如果超时就删除key。检测完W个以后如果删除的key的数量多过25%W,就会继续在该db中进行检查,如果删除的key的数量少过25%W,就会继续检查下一个db。按照这个思路,CPU性能会出现峰值,频率可以通过hz来配置;内存压力不是很大,长期占用内存的冷数据会被持续清理。同时总有部分过期数据没有被删除,不过redis并不会显示给客户端。

Redis中用的比较多的是惰性删除和定期删除。

逐出算法

假设极端情况下一直没有数据过期,内存中数据不断增多。最后新数据进来的时候没有足够的内存,这时redis会临时删除一些数据为当前指令清理存储空间,清理的策略称为逐出算法。

开关

通过info Memory可以查看如下两个开关

  • maxmemory,redis最多会用到的内存量,默认值是0,表示全部占用
  • maxmemory_policy,redis会用什么逐出算法,默认值是noeviction,表示不进行逐出,修改这个值选择不同的算法

算法

一共有下面8种逐出算法

(volatile表示在可能会过期的key集合中进行查找)

  • volatile-lru,least recently used,越久没被使用的越容易被干掉
  • volatile-lfu,least frequently used,使用的频率越少的越容易被干掉
  • volatile-ttl,time to live,越快要过期的越容易被干掉
  • volatile-random,随机抽取

(allkeys表示检测全库的数据)

  • allkeys-lru
  • allkeys-lfu
  • allkeys-random

通常使用较多的还是volatile-lru算法,针对过期的数据越久没使用的越容易被干掉

可以通过修改配置文件来设置逐出算法

[fuhanxiao@testmachine redis]$ cat redis.conf | grep '# maxmemory'
# maxmemory <bytes>
# maxmemory-policy noeviction
# maxmemory-samples 5

也可以直接通过命令快速修改

127.0.0.1:6379> config set maxmemory-policy volatile-lru
OK

注意这里的key名中间是短横线而不是info命令中看到的下划线

修改好以后可以通过如下命令进行查询是否生效

127.0.0.1:6379> config get maxmemory-policy
1) "maxmemory-policy"
2) "volatile-lru

性能指标

redis的性能指标是通过查询key时候的命中和失败次数来判断的,可以直接通过info命令来查看这两个数字。

127.0.0.1:6379> info Stats
# Stats
...
...
evicted_keys:0
keyspace_hits:24
keyspace_misses:9
...
...

我这台因为是测试机器所以miss数目比较高。同时也可以看到被逐出的key的个数,这里是0。因为测试逐出需要大量的key,我这里就不测试了。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

Redis数据的删除策略 是一个key-value存储系统。可基于内存亦可持久化的日志型数据库,一般存储高热度数据,所有数据均存放在内存中,通过TTL指令获取目前状态:-1 是永久有效的数据 -2是已过期/删除或者是未定义的数据。Redis删除的就是已过期的数据,而过期的数据不会真的删除。redis服务器有很多操作需要执行时,CPU的压力会很大,于是redis中的策略是,在内存还够的前提下,先不释放已删除数据的内存空间,先执行客户端的指令。 阅读详情

相关推荐

白炽灯寿命工程解析:从钨丝蒸发到电压控制的可靠性设计

白炽灯作为一种经典的电光源,其工作原理基于电流通过钨丝产生热辐射发光。在高温下,钨丝会持续蒸发导致灯丝逐渐变细、电阻增大,这是影响其寿命的核心物理机制。从工程角度看,白炽灯的可靠性设计涉及材料科学、热力学和电路设计的交叉,技术价值在于通过理解其失效原理,可以在成本与性能间取得最佳平衡。在实际应用中,电压波动、开关浪涌电流和机械振动是主要寿命杀手,尤其在工业控制、仪器仪表和特定照明场景中,合理的设计能大幅提升系统稳定性。本文深入探讨了钨蒸发、热应力等关键因素,并结合浪涌抑制和降压设计等实战技巧,为工程师提供了

weixin_28684655的博客 568

redis之setbit、getbit、bitcount命令

setbit命令: 语法:setbit key offset value 对key所存储的字符串值,设置或清除指定偏移量上的位(bit). 位的设置或者清除取决于value参数,可以是0也可以是1. 当key不存在的时候,自动生成一个新的字符串. 字符串会进行伸展以确保它可以将value保存在指定的偏移量上。当字符串上的值进行伸展的时候, 空白位置以0填充 offset 参数必须大于或者等于0 小...

Sunny 1952

OSCS开源安全周报第13期:Exchange 高危漏洞公开

OSCS 社区共收录安全漏洞31个,公开漏洞值得关注的是 Apache Commons JXPath 存在代码执行漏洞(CVE-2022-41852),Microsoft Exchange 远程代码执行漏洞(ProxyNotShell(CVE-2022-41040),Apache Tomcat 条件竞争漏洞(CVE-2021-43980),FasterXML jackson-databind 小于2.14.0-rc1拒绝服务漏洞(CVE-2022-42003)。

OSCS开源安全社区 4198

redis高级特性-bitmap

在我们平时开发过程中,会有一些bool型数据需要存取,比如用户一年的签到记录,签了是1,没签是0,要记录365天。如果使用普通的key/value,每个用户要记录365个,当用户上亿的时候,需要的存储空间是惊人的。为了解决这个问题,Redis 提供了数据结构,这样每天的签到记录只占据一个位,365天就是365个位,46个字节 (一个稍长一点的字符串) 就可以完全容纳下,这就大大节约了存储空间。

weixin_42128977的博客 1598

研发工作量科学量化评估模型:从多维系数到等级落地指南

摘要:本文提出了一套基于多维系数的科学量化评估模型,用于精准评估软件开发工作量。该模型从需求复杂度、技术难度、质量要求和依赖风险四个核心维度进行量化评估,通过系数乘积计算综合工作量。文章详细说明了各维度的系数区间划分标准,并演示了从基础工作量估算到综合系数计算的具体步骤。该模型通过结构化评估过程,将主观经验转化为客观量化指标,帮助团队提高工作量评估的准确性,增强项目交付的可预测性。其价值在于使评估过程透明化、结构化和可追溯,从而减少项目延期风险,优化资源规划。

友莘居士的博客 1678

基于Lumerical的1550 nm InGaAs/InP与InGaAs/InAlAs APD设计与功率饱和度优化

摘要 本研究利用Ansys Lumerical软件对1550 nm激光雷达应用的InGaAs/InP和InGaAs/InAlAs雪崩光电二极管(APD)进行仿真设计与优化。通过FDTD光学仿真获取光吸收分布,结合CHARGE模块的电学仿真分析暗电流、光电流及雪崩增益特性。重点研究了两种材料体系的性能差异,并针对近距离强反射导致的功率饱和问题提出结构优化方案。仿真结果表明,InGaAs/InAlAs APD具有更优的过量噪声特性,而优化的电荷层设计可显著提升器件的功率饱和阈值。研究提供了完整的仿真流程与代码实

huanghm88的专栏 95

Redis的数据删除策略

Redis的数据删除策略

weixin_68286174的博客 8019

FFMPEG音频开发: Linux下采集摄像头(使用V4L2框架)数据录制成MP4视频保存到本地

一、环境介绍 操作系统介绍:ubuntu 18.04 FFMPEG版本: 4.4.2 摄像头: USB摄像头、虚拟机挂载本机自带摄像头 二、FFMPEG与X264下载编译 X264下载地址: http://www.videolan.org/developers/x264.html FFMPEG下载地址:https://ffmpeg.org/download.html Yasm ...

8868

Redis的删除策略

本文讲述了redis的删除策略和两种逐出算法

weixin_52633911的博客 1440

基于SAHI算法优化YOLOv8的小目标检测性能研究

SAHI(SliceAwareHyperInference)是一种推理优化算法,通过将大图切片为小块并分别推理的方式,实现更精细的小目标检测。提升小目标检测精度:切片后的小目标在每个小块中占比更大,模型能够更好地聚焦。兼容性强:可直接集成到现有目标检测框架中(如YOLO系列、Detectron2等)。支持大分辨率图片和视频推理:减少硬件对大图推理的限制。本文详细探讨了如何通过SAHI(切片辅助超推理算法)结合YOLOv8模型,有效提升小目标检测性能,尤其是在高分辨率图片和视频场景中表现优异。

博客 2368

YOLOv10改进,YOLOv10添加DICAM,用于水下图像增强模块,以提高朦胧水下图像的质量、对比度和色偏

在水下环境中,成像设备会出现水浑浊、光衰减、散射和颗粒问题,导致图像质量低、对比度差和彩色图像有偏差。这给使用传统视觉技术进行水下状态监测和检查带来了巨大挑战。近年来,水下图像增强因其在提高当前计算机视觉任务在水下目标检测和分割中的性能方面发挥着关键作用而受到越来越多的关注。由于主要从自然场景构建的现有方法在提高色彩丰富度和分布方面存在性能限制,作者提出了一种新颖的基于深度学习的方法,即 Deep Inception 和 Channel-wise Attention Modules (DICAM),以提高朦

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 479

redis删除策略和淘汰策略

Redis 是一种内存级,数据都存在内存中,但是针对于已经过期的数据,reids 不 会立刻删除只是会存储在中,当执行删除策略的时候,才会从 expires 中寻找对应的的地址,在存储空间中找到对应的数据进行删除。数据删除其实就是内存和 CPU 占用之间寻找平衡,CPU 才能去处理事情,针对过期数据,要进行删除的时候,一般有三种策略。

weixin_43942414的博客 2518

YOLO训练/写作脚本目录一览 | 涉及标签格式转换、数据扩充、热力图、感受野、精度曲线、数量统计等近百个脚本文件

在大家购买专栏后,便可获得全部的脚本文件。在获取到文件后,只需按照将程序放在个人项目中即可一键运行。

Limiiiing的博客 2375

Redis 的过期键删除策略详解:惰性删除 + 定期删除的实现与原理

减少内存浪费:定期删除可以及时清理长时间未被访问的过期键。控制 CPU 开销:通过限制扫描频率和数量,避免对性能造成显著影响。自适应调节:Redis 会根据当前负载情况自动调整扫描行为,保持系统稳定。Redis 的过期键删除策略是其高效内存管理的关键机制之一。通过结合惰性删除和定期删除,Redis 在内存使用效率和 CPU 性能之间找到了一个良好的平衡点。理解这些机制,不仅有助于我们更好地使用 Redis,还能帮助我们在设计缓存系统时做出更合理的决策。

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Redis的三种删除策略以及逐出算法

给一个key设置过期时间,过期时间一到,这个key对应的过期数据真的被服务器立即删除了吗?答案是并不会立即删除。知道了这个答案,就来看看Redis中如何处理过期的数据。

知识记录 2966

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

关于Redis过期键删除策略详解

关于Redis过期策略详解

自律使我自由 854

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

熟悉Redis吗,那Redis的过期键删除策略是什么

对于Redis,我们业务开发一般都只关心Redis键值对的查询、修改操作,可能因为懒或者只想能用就行,呵呵。很少关心键值对存储在什么地方、键值对过期了会怎么样、Redis有没什么策略处理过期的键、Redis处理过期键又有什么作用?但这些问题却是Java程序员在Redis上进阶的必备知识,不要埋怨Java要学习的系统知识为什么这么多,因为这些确确实实是进阶的程序员所必须掌握的。我们往下看看~

JavaSouth南哥 3139

Redis删除策略和淘汰策略

来的问题,Redis引入了定期删除策略(是他们的一个比较折中的方案)周期性轮询Redis库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除频度。实际上,在前面所说的删除策略,它针对的是expire命令进行的操作,也就是说那些具有时效性的数据(已经过期,并且还在占用内存的数据),我们在这里说的是针对那些并没有过期,或者是内存中的数据没有一个带有有效期,全是永久性数据,这时候删除策略就不起作用了,所以这个时候内存满了我们再去插入数据到内存是怎么做?删除这批key中已过期的。......

weixin_52464817的博客 1827

Redis的三种删除策略以及逐出算法_redis删除数据的三种方法

给一个key设置过期时间,过期时间一到,这个key对应的过期数据真的被服务器立即删除了吗?答案是并不会立即删除。知道了这个答案,就来看看Redis中如何处理过期的数据。

2401_84184729的博客 1387

Redis针对过期key的删除策略

Redis数据库键的过期时间都保存在过期字典中,可使用exit key 或ttl key 或者pttl key命令判断key是否过期。若内存中存放的key-value对较多,Redis应该如何才能保证不影响查询效率又能控制其中的有效缓存?(尽可能保证Redis中存放的key是未过期的key)。 这个问题有三种可能的答案,分别代表了三种不同的过期删除策略: 定时删除:在设置key的过期时间的同...

. 2808

redis详解之key的设置与过期删除策略

redis对存储值的过期处理实际上是针对该值的键(key)处理的,即时间的设置也是设置key的有效时间。Expires字典保存了所有键的过期时间,Expires也被称为过期字段。

原名:@程序员大禹 2709

Redis过期键删除策略终极指南:定期删除与惰性删除详解

Redis作为高性能的内存数据库,其过期键删除策略直接影响系统性能和内存占用。本文将深入解析Redis的两种核心过期键删除机制——定期删除与惰性删除,帮助开发者理解其工作原理、优缺点及适用场景,轻松掌握Redis内存优化的关键技巧。 ## Redis过期键的三种删除策略 Redis采用三种策略结合的方式处理过期键: ### 1. 惰性删除:访问时才检查过期 惰性删除是指Redis在**每次访

gitblog_00556的博客 1021

Redis删除策略、淘汰策略

redis删除策略、淘汰策略

Te_zzx_amo的博客 771

Redis三种过期策略详解

注:转载文章 1、设置过期时间 expire key time(以秒为单位)–这是最常用的方式 setex(String key, int seconds, String value)–字符串独有的方式 具体的使用方式:查看"java企业项目开发实践"的第九章 企业项目开发–分布式缓存Redis(1)和第十章 企业项目开发–分布式缓存Redis(2) 注意: 除了字符串自己独有设置过期时间的方法外...

weixin_44186547的博客 1656
上一篇: Redis从入门到精通(15)redis的事务和锁详解
下一篇: docker多种创建volume操作详解
T型人小付
博客等级 码龄7年 433粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值