Redis过期策略以及淘汰机制

Redis过期机制与内存淘汰策略全解析:从原理到生产实践 在缓存系统设计中,内存管理是决定服务稳定性的关键一环。Redis作为广泛使用的高性能缓存,其过期Key删除与内存淘汰机制直接影响数据命中率和系统响应速度。当内存达到maxmemory上限时,不同淘汰策略(如LRU、LFU)决定了哪些数据被优先清理,而惰性删除与定期删除的组合则平衡了CPU开销与内存回收效率。理解这些底层原理,有助于在生产环境合理配置maxmemory-policy,避免缓存雪崩、大Key阻塞主线程等问题。从纯缓存场景的allkeys-lru选型,到混合存储的volatile策略,再到主从复制 阅读详情

微信公众号:Java患者
专注Java领域技术分享

redis 过期策略

前言

Redis中可以通过expire设置键的过期,那么Redis又是什么时候删除键的呢?

Redis有三种删除策略:

  • 定时删除:在设置键的过期时间同时,会创建一个定时器,通过设置的时间来执行键的删除操作。

  • 惰性删除:不管设置键的过期时间,只有当每次获取键的同时,检查获取到的键是否已经过期,如果过期就删除该键。

  • 定期删除:每隔一段时间,就对Redis数据库进行一次检查,删除里面过期的键。每次要检查多少个数据库,以及要删除多少个过期的键,由Redis的算法决定。

定时删除

定时删除对内存是比较友好的,毕竟通过定时器删除,可以保证过期就删除不占用多的内存,但是每一个键设置了过期时间就给予一个定时器,这种情况下如果过期键比较多的情况下就很占用CPU。

如果有大量的命令请求到redis服务器,而且服务器当前不缺少内存,那么服务器本应该优先将CPU时间用在处理客户端的七年跪求,但是由于此时有定时器在跑,就会占用CPU在删除过期键上面。

惰性删除

惰性删除策略相对定时删除来看是相反的,程序只会在取出键的时候才会对键进行过期检查,这就可以保证删除过期键的操作只会在获取的时候才会执行,这个策略相对来说不会花费额外的CPU资源,但是如果有一个过期键一直保存在数据库中,而没有获取这个键,这个时候就会对内存造成浪费,没有获取就不会进行资源释放。

定期删除

键的定时删除会在Redis的周期性执行任务(serverCron)中执行,默认 每100ms执行一次。

首先会依次遍历每个db,然后针对每个db,每次循环随机选择20个key来判断是否过期,如果一轮所选择的key少于25%过期,则终止迭次。此外在迭代过程中如果超过了一定的时间限制则终止过期删除的任务。

淘汰机制

Redis中不同位数操作系统中最大占用内存不同,在64位的操作系统中,Redis不限制占用内存,在32位系统中最大占用内存为3GB。也可以通过配置文件修改。

# maxmemory <bytes>

当Redis的内存快耗尽的时候,Redis会启动内存淘汰机制,将部分key清理以腾出内存。

redis中提供了8种淘汰策略,也可以在配置中配置。

# volatile-lru -> Evict using approximated LRU among the keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key among the ones with an expire set.
# allkeys-random -> Remove a random key, any key.
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# noeviction -> Don't evict anything, just return an error on write operations.
#
# LRU means Least Recently Used
# LFU means Least Frequently Used
#
# Both LRU, LFU and volatile-ttl are implemented using approximated
# randomized algorithms.
#
# Note: with any of the above policies, Redis will return an error on write
#       operations, when there are no suitable keys for eviction.
#
#       At the date of writing these commands are: set setnx setex append
#       incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
#       sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
#       zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
#       getset mset msetnx exec sort
#
# The default is:
#
# maxmemory-policy noeviction

lru:算法 Least Recently Used 最近最少使用
  • volatile-lru:表示从已经设置过期时间的数据中挑选出最近使用次数最少的数据进行淘汰;

  • allkeys-lru:表示从所有键数据中挑选出最近最少使用的数据进行淘汰

lfu: 算法 Least Frequently Used 最少频率使用
  • volatile-lfu:在设置了过期时间的key中使用LFU算法淘汰

  • allkeys-lfu:在所有键中使用LFU算法淘汰数据

  • volatile-random: 从已设置了过期时间的数据中选择任意数据进行淘汰

  • allkeys-random:在所有键中随机选择任意数据进行淘汰

  • volatile-ttl:从已设置了过期时间的数据中挑选即将要过期的数据淘汰

  • noeviction:默认配置是这个,当内存使用达到阈值的时候,只读不可写。

可以通过配置maxmemory-policy修改淘汰机制。

资料 · 福利

回复 【加群】即可加入Java技术交流修仙群

回复 【Java】即可获取最新零基础Java视频资料

回复 【激活】即可获取IDEA、datagrip等系统激活方式

回复 【面试题】即可获取Java技术相关面试题

往期 · 精彩

盘点那些互联网APP出现的奇葩bug
Redis中String数据类型原理实现

十月一号之后,github新建的默认分支不叫master了

Java面试锦囊(十二)-- Eureka与Zookeeper区别
你连volatile都不在意,你在意什么,在意大利吗

专注分享Java技术,跟我一起学习吧

长按识别二维码关注

一文速览:大模型语料构建与基础训练全流程实战指南 因为模型只有看到足够丰富、高质量的数据,才能真正学到“真本事”,展现出更强大的泛化能力,也就是能够在全新的场景和任务下,做出准确的推理和判断。我们日常做饭的时候,通常会先把买回来的菜仔细清洗干净,把坏掉的叶子、泥土、杂质等去除掉。同理,训练大模型的数据就像我们的食材,如果不干净,就会影响模型的学习效果,甚至训练出逻辑紊乱的模型。在大模型的世界里,有一句名言:“Garbage in, Garbage out”,翻译过来就是“垃圾输入,垃圾输出”,说白了,就是给模型喂的是什么数据,它学到的就是什么知识。 阅读详情

相关推荐

从晶体管到触发器:为什么芯片设计必须区分同步/异步复位?

本文深入探讨了芯片设计中同步复位与异步复位的物理本质与工程权衡。从晶体管级的CMOS结构出发,剖析了两种复位方式在物理实现、时序可靠性(如建立/保持时间、恢复/移除时间)上的根本差异,并分析了在不同应用场景下的选择策略。文章强调,理解复位信号的底层机制对于确保芯片时序收敛、系统上电确定性及整体鲁棒性至关重要。

time3的博客 221

Redis剖析 — 过期策略和内存淘汰机制

Redis是当前一款较受欢迎的NoSQL数据库,其基于内存运行,性能高效。既然是基于内存运行的,那么它就会有存储上限,最高也就是物理内存的容量。当超出设定的Redis内存时,要么释放内存,那么报OOM(内存溢出)的异常了。那么Redis 是如何处理过期数据的?当内存不够用时 Redis 又是如何处理的? 在本篇博客文章中,我将带着这些问题详细的讲解Redis的过期策略和内存淘汰机制。

小熊的学习记录 2795

Linux-VMware安装后没有虚拟网卡VMnet1和VMnet8(亲测有效,一步一步跟着绝对成功)

VMware-安装后没有虚拟网卡VMnet1和VMnet8 就这个破东西我昨天弄了一天,网上什么VMware卸载重装,用CCleaner清理注册表什么的操作我全用了,但是昨天就是弄不好,同样的操作我昨天试了无数遍一直觉得可能是 持续更新中… 文章参考学习地址:https://blog.youkuaiyun.com/qq_42445139/article/details/87872130 ...

杨的博客 8844

Java面试 Redis篇 -数据过期策略

Redis对数据设置数据的有效时间,数据过期以后,就需要将数据从内存中删除掉。可以按照不同的规则进行删除,这种删除规则就被称之为数据的删除策略(数据过期策略)。Redis使用的是结合的方式。

weixin_74880524的博客 294

西门子机床数据采集实战:从828D到840DSL的CNC设备联网与实时监控

本文深入探讨了西门子机床数据采集的实战方案,重点解析了从828D到840DSL等CNC设备如何实现免授权、低成本联网与实时监控。文章通过对比不同型号系统的数据接口差异,提供了详细的配置步骤、核心数据点清单以及避坑指南,旨在帮助工厂技术人员经济高效地挖掘机床数据价值,提升生产管理效率。

weixin_29181861的博客 1324

如何解决ipa包上传App Store Connect时出现的无效二进制文件问题

本文详细解析了ipa包上传App Store Connect时出现无效二进制文件问题的常见原因及解决方案。从Scheme配置、架构支持到权限声明,提供了全面的检查步骤和实用技巧,帮助开发者快速定位并解决上传问题,确保应用顺利通过审核。

weixin_28833069的博客 314

java操作Redis设置过期时间的方法

TimeUnit.SECONDS 代表秒,还有天,周,月,年自己测试。如:TimeUnit.MILLISECONDS 代表分钟。把student对象存入redis,过期时间为3000秒。1.引入注解 RedisTemplate。参数2:是值 是存入redis里的值。参数3:时间,类型为long。参数1:是key 键。

nana1253431195的博客 8614

初级文章【西门子】字符拼接成字符串

针对S7-400极其以下PLC,1200往上据说有专门的块了呢,首先,我是不用库的,需要什么函数会自己写,OK进入正题。 首先,我们有一个DB块,里面有14个char,一个14位的char数组和一个14位的string。如下图。 我们的目的是将char1-char10拼接成一个string。 第一种方式:第一步,将char放进数组。 ​​​​​​​ 相信大家都能看明白,但是我还是要解释解释 L取值2 T赋值到临时变量DBNO(INT) OPN DB [#DBNO]获取DB块,这一句.

NS_Speak(IVAV) 1万+

java redis过期键,redis系列之------过期策略

fg【2021新书】虚拟化高性能nosql书140.4元(需用券)去购买 >前言我们都知道redis是常驻在内存当中的,因此他的效率比MySQL要快很多很多。但又引发了另外一个问题,内存从本质上讲,它是昂贵的,不能用于大量的长时间的存储,他是“不安全不稳定的“,并且有可能存在内存泄露,不能与磁盘相比。那么如果解决这种问题呢?因此我们使用redis的时候,强制的应该给每个Key加上过期时间。我...

weixin_39866265的博客 209

第一章 DRM 子系统概述:1.2 专栏定位与技术覆盖范围

本专栏系统解析Linux内核DRM图形子系统的核心技术,涵盖GEM对象管理、TTM内存机制、DRM-Fence同步等核心模块,深入剖析DMA-BUF共享、DMA_Resv资源管理等关键技术。通过解读内核源码与用户态接口(libdrm),结合进程管理、匿名inode等底层机制,构建完整的DRM知识体系。专栏兼顾深度与易懂性,辅以实际应用场景分析,既适合图形驱动开发新手入门,也可满足资深工程师进阶需求,帮助读者掌握从内核实现到应用开发的全栈知识。

图形/计算GPU的驱动与虚拟化技术分享园地 3019

激光雷达点云异常现象详解:鬼影、高反膨胀与拖点

现象核心外观主要成因核心硬件对策核心算法对策鬼影位置错误,出现"复制"的物体镜面反射/光学元件间杂散光物理光阑、抗反射涂层多帧时序一致性检验、反射率逻辑判断膨胀尺寸变大,轮廓呈毛刺状信号饱和、像素/通道串扰可变增益控制、随机编码序列强度阈值滤波、几何轮廓拟合(剪裁)拖点边缘粘连,出现"阶梯"或"连线"光斑跨立边缘、双回波融合小光斑光学设计、多回波支持邻域深度突变检测、波形脉宽分析这些异常现象是当前激光雷达感知中的核心难点,通常需要硬件物理特性优化与上层感知算法。

Fun_LiDAR的博客 299

Redis的过期策略以及内存淘汰机制

我们知道,redis中缓存的数据是有过期时间的,当缓存数据失效时,redis会删除过期数据以节省内存,那redis是怎样删除过期数据的?删除过期数据的策略是什么?这就是我们今天要讨论的第一个问题:Redis过期策略。 redis为什么这么快,原因之一就是Redis操作都是基于内存的,既然是基于内存的,而内存的大小是有限的,当内存不足或占用过高时,怎么办?这就是我们今天要讨论的第二个问题:Redi...

Felix 8637

华为OD机试 - 荒岛求生 - 栈Stack(Python/JS/C/C++ 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2837

Redis——过期策略、内存淘汰机制

volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。不是的,如果定期删除没删除key。当再次向内存空间加入E时,这时内存空间又不足了,选择在内存空间中待的最久的C将其淘汰出内存,这时的内存空间存放的对象就是E->B->D。volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。当加入D时,就出现了问题,内存空间不够了,因此根据LRU算法,内存空间中A待的时间最为久远,选择A,将其淘汰。

qq_74811378的博客 1004

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

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Redis】Redis 的过期策略以及内存淘汰机制详解

hz 默认是 10。惰性删除不是去主动删除,而是在你要获取某个 key 的时候,Redis 会先去检测一下这个 key 是否已经过期,如果没有过期则返回给你,如果已经过期了,那么 Redis 会删除这个 key,不会返回给你。Slave 在读取过期键时,不会做判断删除操作,而是继续返回该键对应的值,只有当 Master 发送 DEL 通知,Slave 才会删除过期键,这是统一、中心化的键删除策略,保证主从服务器的数据一致性。Master 载入 RDB 时,文件中的未过期的键会被正常载入,过期键则会被忽略。

迪曼奥特迦-博客 1万+

计算机控制技术及应用

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

Redis 的过期策略与内存淘汰机制

Redis 作为高性能的键值存储系统,其过期策略和内存淘汰机制是保证数据时效性和内存高效利用的核心功能。

m0_73355421的博客 1939

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Redis的过期策略和内存淘汰机制

Redis的过期策略和内存淘汰机制是保障其高性能和稳定性的关键。正确设置过期策略和内存淘汰机制,能够有效管理内存,防止内存溢出,确保系统在高负载下依然能稳定运行。

良月柒 1393

问:说说Redis的过期策略和内存淘汰机制

Redis的过期策略和内存淘汰机制是其高性能键值存储的基石。过期策略包括定时删除、惰性删除和定期删除,旨在有效管理设置过期时间的键。内存淘汰机制则通过多种策略(如LRU、LFU、随机等)在内存达到限制时释放空间。合理配置这些机制,结合具体场景(如缓存系统、会话管理等),可确保Redis高效稳定运行。

技术铺掌柜 1302

深入了解Redis的过期策略和内存淘汰机制

以上就是Redis中常见的内存淘汰机制。根据业务需求和系统特点,可以选择合适的淘汰机制来保证系统的性能和稳定性。例如,对于需要保持较高访问速度的系统,可以选择LRU淘汰机制;对于需要保证数据的新鲜度的系统,可以选择LFU淘汰机制;而随机淘汰则是一种简单且效率较低的淘汰机制,适用于一些特定场景。通过了解Redis的过期策略和内存淘汰机制,我们可以更好地优化Redis的使用。合理选择过期策略和内存淘汰机制,可以提高系统的性能和稳定性,减少资源的浪费,从而更好地满足不同场景下的需求。

喔的嘛呀的博客 788

redis过期策略和内存淘汰机制

Redis过期删除采用的是定期删除,默认是每100ms检测一次,遇到过期的key则进行删除,这里的检测并不是顺序检测,而是随机检测。显然Redis也考虑到了这一点,当我们去读/写一个已经过期的key时,会触发Redis的惰性删除策略,直接回干掉过期的key。单链表可以实现头部插入新节点、尾部删除旧节点的时间复杂度都是O(1),但是对于中间节点时间复杂度是O(n),因为对于中间节点c,我们需要将该节点c移动到头部,此时只知道它的下一个节点,要知道其上一个节点需要遍历整个链表,时间复杂度为O(n)。......

Dream 3322

Redis的过期策略及内存淘汰机制详解

Redis的过期策略和内存淘汰机制为我们提供了灵活的内存管理手段,帮助我们在高性能应用中高效地管理数据。通过合理设置过期时间、选择合适的淘汰策略以及定期监控和调整,我们可以确保系统的稳定性和可靠性,从而更好地满足业务需求。

良月柒 1307

redis的key过期删除策略和内存淘汰机制

Redis的过期键删除策略主要包括三种:定时删除(立即释放内存但消耗CPU)、惰性删除(访问时才检查删除,可能内存泄漏)和定期删除(折中方案,定期扫描删除)。Redis实际采用惰性删除+定期删除的组合策略。内存淘汰机制包括不淘汰数据和针对过期键或全部键的多种淘汰算法(如LRU、LFU、TTL等)。在RDB/AOF持久化和主从复制过程中,过期键有特殊处理机制,如主节点删除后通知从节点同步删除。这些策略平衡了内存使用和性能需求。

weixin_44146398的博客 1381

Redis的过期策略、内存淘汰机制

volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。不是的,如果定期删除没删除key。当再次向内存空间加入E时,这时内存空间又不足了,选择在内存空间中待的最久的C将其淘汰出内存,这时的内存空间存放的对象就是E->B->D。volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。当加入D时,就出现了问题,内存空间不够了,因此根据LRU算法,内存空间中A待的时间最为久远,选择A,将其淘汰。

qq_74811378的博客 676

【redis】redis的过期策略以及内存淘汰机制

今天我们讨论下redis的过期策略以及内存淘汰机制,如果你想要考察一个人对redis的了解,那吗这个问题是必选的,从他对这个问题的回答中,就可以了解到他的redis深浅。

热爱技术,享受生活 2万+

Redis的过期策略及内存淘汰机制

Redis的过期策略及内存淘汰机制 对于一个缓存型redis,如果本身只有10G的容量,那么流量增大,写入了15G的数据,那么对于原本的10G数据是按照怎样的策略进行删除呢?在实际使用过程中,redis里数据已经设置了过期时间,但是时间到了,内存占用率还是比较高,数据没有删除的原因是什么呢?今天一起来看下。 对于一个缓存型redis,如果本身只有10G的容量,那么流量增大,写入了15G的...

liben0429的博客 233

redis 默认过期策略_Redis的过期策略及内存淘汰机制

关注公众号:xy的技术圈Redis的用途非常广泛。作为一个高性能的内存数据库,它经常被用于缓存的业务场景。所谓缓存,即在第一次获取到数据的时候,把它暂存在内存中。这样下次需要这个数据的时候,就直接从内存中取,不用再去查询数据库或调用远程接口,这样可以极大地提高应用程序的性能。如果缓存中的数据永久存在,那占用的内存就会变得越来越大。而内存是有限的,所以缓存系统需要在需要的时候删除一些不必要的缓存数据...

weixin_35793018的博客 162
上一篇: Redis中String数据类型原理实现
下一篇: cd `pwd`重新进入当前目录
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值