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技术,跟我一起学习吧

长按识别二维码关注

WSL 运行make提示/lib/modules/xxx/build: No such file or directory. Stop.错误解决办法 WSL运行make提示/lib//modules/xxx文件或目录不存在。 WSL2的内核是修改过的,无法使用 ubuntu上游的内核头文件和modules文件,因此,我们需要手动编译并安装一个版本。 阅读详情

相关推荐

Isaacgym使用操作指南

Isaac Gym 是一个强大的仿真工具,特别适合那些需要进行大规模并行仿真和训练的机器人和强化学习任务。通过 GPU 加速、深度学习集成和丰富的物理仿真能力,Isaac Gym 能够显著提高仿真和训练效率,是机器人学和 AI 研究中的一大利器。

Tony Wey的博客 1万+

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

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

小熊的学习记录 2795

MobaXterm破解14个会话限制的保姆级教程(附Python环境配置指南)

本文提供了MobaXterm破解14个会话限制的详细教程,并深入讲解了如何配置稳定的Python环境以支持相关脚本运行。通过理解软件授权机制、安全实践步骤以及许可文件的应用,帮助用户解除会话数量限制,实现高效的远程服务器管理与自动化运维。

weixin_29211309的博客 1628

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

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

weixin_74880524的博客 294

获取上传至DMS服务器上文件的URL

如果需要失效时间延长会设置URL永久有效, 可以去修改函数SCMS_URL_GENERATE的参数DURATION 或EXPIRATION ,DURATION最大时间是999999,若需要永久有效,则需要设置EXPIRATION的时间,这时系统会忽略DURATION的参数,生成URL的时候 SCMS_URL_GENERATE会调用SCMS_URL_SIGN函数这是其中默认这是了URL的生效时间为两小时。

一只学习的渣渣 540

LIGGGHTS开源离散元仿真:从基础安装到高级应用实战

本文详细介绍了LIGGGHTS开源离散元仿真软件的基础安装、脚本编写及高级应用实战。从颗粒自由落体模拟到工业级复杂系统建模,涵盖CFD-DEM耦合、高性能计算优化等关键技术,帮助用户快速掌握这一强大的颗粒仿真工具。特别适合需要处理颗粒系统仿真的科研人员和工程师。

l1k9j8h7g6的博客 619

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

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

nana1253431195的博客 8614

u-boot-2014.10移植第22天----添加nand flash命令支持(四)

解决问题:nand0: MTD Erase failure: -5 drivers/mtd/nand/nand_bbt.c文件中初始化bbt/* * Allocate memory (2bit per block) and clear the memory bad block * table. */ this->bbt = kzalloc(len, GFP_

fulinux的博客 3631

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

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

weixin_39866265的博客 209

Ardupilot chibios IO固件,IO与FMU通信,固件下载(3)

目录 文章目录目录摘要 摘要 本节主要记录自己学习IO与FMU通信

陌城烟雨 2798

【Linux命令大全】006.网络通讯之write命令(实操篇)

Linux write命令摘要 write是Linux系统中用于用户间实时通讯的命令工具,允许向其他登录用户的终端发送消息。主要功能包括: 基本使用:通过write username向指定用户发送消息,Ctrl+D结束输入 终端指定:当用户登录多个终端时,可用write username tty指定目标终端 实用技巧: 使用who查看在线用户 通过管道发送单行消息:echo "内容" | write user 支持多行消息发送和简单聊天会话。

yuhuasheng1997的博客 213

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

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

Felix 8637

RT-DETR改进策略【独家融合改进】| SPD-Conv+PPA 再次提升模型针对小目标的特征提取能力

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1153

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

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

qq_74811378的博客 1004

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

迪曼奥特迦-博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

m0_73355421的博客 1939

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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、付费专栏及课程。

余额充值