设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

查看: 698|回复: 0

Redis之Key过期策略的用法解读

[复制链接]

  离线 

TA的专栏

  • 打卡等级:常驻代表
  • 打卡总天数:34
  • 打卡月天数:3
  • 打卡总奖励:415
  • 最近打卡:2025-12-19 12:02:59
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
312
主题
274
精华
0
金钱
1325
积分
654
注册时间
2023-2-11
最后登录
2025-12-19

发表于 2025-9-1 09:07:29 | 显示全部楼层 |阅读模式
一、什么是 Key 的过期策略?

在 Redis 中,Key 的过期策略是指管理键生命周期的机制。通过设置过期时间(TTL - Time To Live),Redis 能够自动删除那些已经过期的键,从而释放内存空间。
这对于缓存场景尤为重要,因为它确保了数据不会永久性地占用内存,同时保持了系统的高效运行。

二、过期策略的核心概念

生存时间(TTL)

  • TTL 表示一个键在 Redis 中存活的时间长度。
  • 可以通过
    1. EXPIRE
    复制代码
    1. PXPIRE
    复制代码
    命令分别以秒和毫秒为单位设置 TTL。
过期时间戳(Expiry Timestamp)

  • 每个带有过期时间的键都会被赋予一个具体的过期时间戳,表示该键将在何时失效。
    1. EXPIREAT
    复制代码
    1. PEXPIREAT
    复制代码
    命令分别以秒和毫秒为单位设置过期时间戳。

三、过期键的删除策略

Redis 提供了两种主要的策略来处理过期的键:

惰性删除(Lazy Deletion)

工作原理

  • 当一个键过期后,并不会立即被删除。
  • 只有在下一次访问该键时,Redis 才会检查其是否已过期。
  • 如果已经过期,则该键会被删除。
优点

  • 减少了 CPU 和内存的使用,因为不需要频繁扫描和删除过期键。
  • 适用于对延迟不敏感的应用场景。
缺点

  • 过期键可能会在内存中存在较长时间
  • 占用不必要的空间

积极删除(Active Deletion)

工作原理

  • Redis 定期运行后台任务,主动扫描并删除已经过期的键。
  • 这种策略确保了内存不会被过多的过期键占用。
优点

  • 及时释放内存空间,避免过期键堆积影响系统性能。
  • 适用于高并发和对延迟敏感的应用场景。
缺点

  • 增加了 CPU 的负载
  • 因为后台扫描任务需要一定的计算资源

四、设置过期时间的命令

Redis 提供了多种命令来设置键的过期时间:
  1. EXPIRE key seconds
复制代码


  • 以秒为单位设置键
    1. key
    复制代码
    的生存时间。
  • 示例:
    1. EXPIRE myKey 3600
    复制代码
    表示
    1. myKey
    复制代码
    在 3600 秒后过期。
  1. PXPIRE key milliseconds
复制代码


  • 以毫秒为单位设置键
    1. key
    复制代码
    的生存时间,提供了更高的精度。
  • 示例:
    1. PXPIRE myKey 1800000
    复制代码
    表示
    1. myKey
    复制代码
    在 1,800,000 毫秒(即 30 分钟)后过期。
  1. EXPIREAT key timestamp
复制代码


  • 设置键
    1. key
    复制代码
    的过期时间为指定的 Unix 时间戳(以秒为单位)。
  • 示例:
    1. EXPIREAT myKey 1728000000
    复制代码
    表示
    1. myKey
    复制代码
    将在时间戳 1,728,000,000 对应的时间点过期。
  1. PEXPIREAT key timestamp
复制代码


  • 设置键
    1. key
    复制代码
    的过期时间为指定的 Unix 时间戳(以毫秒为单位)。
  • 示例:
    1. PEXPIREAT myKey 1728000000000
    复制代码
    表示
    1. myKey
    复制代码
    将在时间戳 1,728,000,000,000 对应的时间点过期。

五、查询剩余生存时间

Redis 提供了两个命令来查询键的剩余生存时间:
  1. TTL key
复制代码


  • 返回以秒为单位的键
    1. key
    复制代码
    的剩余生存时间。
  • 示例:
    1. TTL myKey
    复制代码
    可能返回
    1. 300
    复制代码
    ,表示该键还有 300 秒未过期。
  1. PTTL key
复制代码


  • 返回以毫秒为单位的键
    1. key
    复制代码
    的剩余生存时间。
  • 示例:
    1. PTTL myKey
    复制代码
    可能返回
    1. 180000
    复制代码
    ,表示该键还有 180,000 毫秒(即 3 分钟)未过期。

六、批量设置和处理

在实际应用中,可能需要对多个键进行批量的过期时间设置或管理。为此,可以结合使用 Redis 的管道(Pipeline)功能来提高操作效率:
管道(Pipeline)
将多个命令一次性发送给 Redis 服务器,减少网络往返次数,提升性能。
示例:
  1. import redis

  2. r = redis.Redis(host='localhost', port=6379, db=0)
  3. pipe = r.pipeline()

  4. # 批量设置过期时间
  5. pipe.expire('key1', 3600)
  6. pipe.expire('key2', 3600)
  7. pipe.expire('key3', 3600)

  8. # 执行管道中的命令
  9. pipe.execute()
复制代码
七、选择合适的删除策略

在实际应用中,应根据具体需求和系统负载情况来选择过期键的删除策略:
惰性删除

  • 适用于对延迟不敏感、内存资源较为充足的场景。
  • 可以通过调整
    1. maxmemory
    复制代码
    1. maxmemory-policy
    复制代码
    来优化内存使用。
积极删除

  • 适用于高并发、需要快速响应的应用场景。
  • 需要注意的是,积极删除会增加 CPU 的负载,因此在配置时应权衡系统资源的使用情况。

八、注意事项

过期时间的精度

  • 使用
    1. PXPIRE
    复制代码
    1. PEXPIREAT
    复制代码
    命令可以设置更精确的过期时间,适用于需要严格控制时间的应用场景。
键不存在时的行为

  • 如果尝试对一个不存在的键设置过期时间,Redis 会返回错误。
  • 因此,在操作前应确保键的存在性,或使用
    1. SET
    复制代码
    等命令同时设置值和过期时间。
内存管理

  • 过期键不会立即被删除,而是会在一定时间内被 Redis 的后台任务清理。
  • 为了避免内存不足的问题,建议合理配置
    1. maxmemory
    复制代码
    和选择合适的内存淘汰策略。

总结

Redis 提供了灵活的过期时间设置和多种删除策略,能够满足不同应用场景的需求。
在实际使用中,应根据系统的负载情况和应用的特点来选择合适的命令和策略,以优化性能和资源利用率。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表