0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Redis键的生存时间、生存策略和毁灭策略

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-08 14:55 次阅读

先来回顾一下Redis键的生存时间,过期时间的设置;然后会讲到过期键删除策略;然后会聊其他功能对过期键的处理。

2.键的生存时间

键过期时间设置通过Expire命令或者Pexpire命令,客户端可以以毫秒级的精度为数据库中的某个键设置生存时间,一段时间后Redis服务器会删除生存时间为0的键。下面我们看一下Redis键的过期时间设置,以及查询键剩余寿命。

EXPIRE key 5 #设置一个键的过期时间 单位秒
EXPIREAT KEY 1660753861  #设置过期时间某个时间戳过期(UNIX时间戳)单位秒

PEXPIRE key 33 #设置一个键的过期时间 单位毫秒
PEXPIREAT key 1660839534000 #设置过期时间某个时间戳过期(UNIX时间戳)单位毫秒

TTL key  # 返回键的剩余过期时长,单位秒
PTTL key # 返回键的剩余过期时长,单位毫秒

Redis中的这些键的过期时间如何保存

Redis中维护了一个过期字典。其数据结构中,字典的键是一个指针,指向某个数据库键,而字典的键值则是一个long类型的整数,表示一个毫秒精度的UNIX时间戳。

其实上面几种设置键过期时间的命令相当于最后都是调用 PEXPIREAT 这个命令。

3.键的过期删除策略

3.1 如何判定键过期

Redis中判断键是否过期会使用以下的方法

  • 检查给定的键是否存在于过期字典,如果存在则获取键的过期时间
  • 检查当前的UNIX时间戳是否大于键的过期时间戳,大于过期时间戳的话则判定键过期

3.2 三种过期键删除策略

常见删除策略有三种:定时删除、惰性删除、定期删除

3.2.1定时删除

定时删除是在设置键的过期时间时,设置一个定时器,定时器会在键的过期时间到来时立即删除键

  • 优点:内存友好,可以保证过期键尽可能快速地被删除,释放内存。
  • 缺点:CPU资源分配不友好,如果过期键比较多的时候,此时删除会占用大量的CPU资源,从而间接影响Redis的性能。
3.2.2惰性删除

惰性删除只会在程序需要使用键时,才会对当前键进行过期检查,而不会去删除其他的过期键。

  • 优点:CPU资源耗费小,因为只是在取出键的时候才会做过期检查,并删除等操作。
  • 缺点:过期键会占用内存,如果一个过期键永远不被使用,那么就永远不能被删除,会造成内存泄漏。

惰性删除执行步骤如下:

  1. 执行读写命令时去检查键的过期时间
  2. 如果键过期,删除键,整个流程会按照键不存在的情况处理
  3. 如果键未过期,则按照键存在的情况执行命令
3.2.3定期删除

定期删除是每隔一段时间执行一次过期键删除操作,可以通过限制删除的操作执行的时长和频率来减少CPU资源占用。同时定期删除策略不会导致过期键过多的堆积,造成大量内存泄漏。

定期删除策略有两个点比较重要,执行时长和执行频率。需要两者结合才能达到最优的效果。

定期删除步骤:

  1. 从设置过期时间的key的集合中随机检查20个key
  2. 删除其中的过期键。如果检查结果中25%以上的key过期,则开始新一轮任务。
  3. 每次会按顺序在每个数据库执行,如果在3号数据库返回,则会记录下来,下次删除操作执行的时候会从4号数据库开始,就这样循环遍历整个Redis数据库。

定期任务执行频率:

为了定期检测资源和服务状态并根据预定策略执行相应的操作,Redis会调用内部函数来执行多种后台任务。

其执行频率由hz参数指定,默认为10,即每秒执行10次。

图片

image-20220821131302978

这个值可以设置1-500,但是官方建议设置100以下,设置过大会造成CPU资源占用过大。基本上只用默认值就能满足大部分需求。

4.其他功能对过期键的处理

Redis数据保存有AOF和RDB两种功能。对于过期键的处理也不相同。

RDB持久化对过期键的处理:

  • 生成RDB文件时。 过期key会被忽略,从而不会被保存到RDB文件中
  • 加载RDB文件。
    • 主服务器模式。载入RDB文件时,会对key的过期时间进行检查,过期键会被忽略,不会加载到Redis中
    • 从服务器模式。所有数据key都会加载到Redis中

AOF持久化对过期键的处理:

  • AOF文件写入的时候,会append删除语句, DEL key 。
  • AOF重写的时候过期key则不会被写入AOF文件中。

当Redis服务器处于复制模式时对过期键的处理:

  • 主服务器删除key时,会向从服务器发送DEL命令
  • 从服务器不会处理过期key
  • 从服务器只有接到Master发送的DEL命令才会删除key

总结

Redis的过期策略采用惰性删除和定期删除两种组合方式,其中惰性删除保证过期键一点过不会被使用,定期删除可以保证过期数据得到释放,优化资源占用率。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9123

    浏览量

    85322
  • 定时器
    +关注

    关注

    23

    文章

    3246

    浏览量

    114715
  • 数据库
    +关注

    关注

    7

    文章

    3794

    浏览量

    64360
  • Redis
    +关注

    关注

    0

    文章

    374

    浏览量

    10871
收藏 人收藏

    评论

    相关推荐

    如何排查Redis性能问题 Redis内部实现原理解析

    作为业务开发人员,我们需要了解 Redis 的基本原理,例如各个命令执行的时间复杂度、数据过期策略、数据淘汰策略等,从而更合理地使用 Redis
    发表于 07-05 12:33 333次阅读
    如何排查<b class='flag-5'>Redis</b>性能问题 <b class='flag-5'>Redis</b>内部实现原理解析

    网络存储系统可生存性量化评估

    【作者】:张益;霍珊珊;【来源】:《清华大学学报(自然科学版)》2009年S2期【摘要】:针对当前网络存储系统可生存性评估缺乏系统的评估指标和量化评估方法的现状,提出了量化评估指标体系和基于多指标
    发表于 04-24 09:43

    新人没有积分,不好生存

    新人没有积分,不好生存
    发表于 12-17 13:59

    JESD204B生存指南

    JESD204B生存指南
    发表于 05-28 12:08

    无线传感器网络节能策略

    分布范围广的传感器节点不能补充能量,存在严重的能量约束。高效使用节点的能量,延长网络系统的生存期成为传感器网络的首要设计目标。本文对无线传感器网络的主要节能策略进行分析说明。
    发表于 06-27 07:02

    Redis的内存淘汰机制

    redis淘汰策略
    发表于 09-27 07:55

    浅析Redis的过期机制

    Redis数据过期策略详解
    发表于 10-12 15:12

    浅析cache控制器的分配策略与替换策略

    在cache的相关操作中,cache控制器需要根据需求做出许多不同的选择。例如:分配策略是否需要将数据从主存中分配到cache中;替换策略组相联cache中,所有的way都已经有填充数据了,miss
    发表于 06-15 16:24

    WDM光网络生存策略及仿真

    讨论了不同的网络生存策略各自的优缺点,针对专用通路保护和共享通路保护两种策略进行了仿真试验,对其性能进行分析比较,得出结论:专用通路保护比共享通路保护能更
    发表于 04-19 19:19 20次下载

    WDM网状网的生存性问题研究

    研究出一种最优的 WDM 光网络生存策略是未来全光网络组网的重要方面之一。定性地介绍了几种WDM网状网的保护恢复方案。采用预规划方法详细分析了专用和共享通道保护方法以及
    发表于 07-19 17:00 27次下载

    带无线能量补充设备的WSN基站部署策略

    为延长无线传感器网络(WSN)生存周期,引入无线能量补充设备,设计一种wSN基站部署策略。通过聚类传感器节点并计算每个区域传感器节点的通信量确定基站位置坐标,构建以最大化能量补充设备驻站时间比为目标
    发表于 06-04 15:47 9次下载

    Redis 的数据清理策略

    本文整理 Redis 的数据清理策略所有代码来自 Redis version :5.0, 不同版本的 Redis 策略可能有调整
    发表于 09-19 14:24 372次阅读
    <b class='flag-5'>Redis</b> 的数据清理<b class='flag-5'>策略</b>

    Redis的删除策略和内存淘汰机制介绍

    Redis过期的删除策略Redis的过期删除策略就是:惰性删除和定期删除两种策略配合使用。
    的头像 发表于 10-09 11:06 490次阅读

    Redis 如何删除数据

    Redis 中所有的都可以设置过期策略,就像是所有的都可以上"生死簿",上了生死簿的时间
    的头像 发表于 10-09 16:01 502次阅读

    redis的淘汰策略

    Redis是一种基于内存的键值存储系统,为了充分利用内存,Redis采用了一些淘汰策略来管理内存空间。淘汰策略的作用是当内存空间不足时,选择合适的数据对象进行淘汰,释放出更多的内存空间
    的头像 发表于 12-04 16:23 544次阅读