当前位置: 首页 > news >正文

Redis 过期删除策略

Redis 过期删除策略

Redis 过期删除策略主要包括两种:惰性删除(Lazy Expiration)和定期删除(Periodic Expiration)。这两种策略通常会配合使用,以在内存使用效率、CPU 资源消耗以及过期键清理的及时性之间取得平衡。

1. 惰性删除(Lazy Expiration)

工作原理

  • 当客户端尝试访问一个键(通过任何读写命令)时,Redis 会检查该键是否设置了过期时间,且是否已经过期。
  • 如果键已过期,Redis 会在执行命令前立即将其删除,并返回相应的键不存在(如 nil 或错误)响应给客户端。这样,客户端的请求相当于触发了过期键的删除操作。

优点

  • 资源节约:只有在访问过期键时才进行删除操作,避免了周期性扫描所有键的开销,减少了 CPU 使用率。

缺点

  • 非即时性:过期键不会立刻被删除,只有在被访问时才会被动清理。如果大量过期键长时间未被访问,它们会占据内存,可能导致内存浪费。

2. 定期删除(Periodic Expiration)

工作原理

  • Redis 默认以周期性的方式(默认每秒10次)运行一个名为 activeExpireCycle 的后台进程,该进程会随机检查一部分数据库(默认每次检查20个数据库,如果有多个数据库的话)中的键,判断它们是否过期。
  • 在检查过程中,Redis 会根据一定的概率(基于键的过期时间分布)决定是否继续检查更多的键,以避免一次性清理大量过期键导致服务器阻塞。
  • 当检查到过期键时,立即删除。同时,Redis 会限制每次周期性扫描的耗时,确保不会影响正常服务。

优点

  • 主动清理:即使长时间未访问的过期键也能被定期发现并删除,有助于避免内存浪费。
  • 可控性:通过配置参数可以调整定期删除的频率和扫描范围,以适应不同负载和内存需求。

缺点

  • 资源消耗:定期扫描和删除过期键会占用一定的 CPU 时间,特别是在过期键较多的情况下。
  • 非实时性:尽管定期删除,但仍然无法保证过期键会在精确的过期时间点被删除,存在一定的延迟。

策略配合与参数调整

Redis 默认同时启用惰性删除和定期删除策略,以兼顾资源效率和过期键清理的及时性。实际使用时,可以通过调整以下参数来优化过期键的处理:

  • hz:Redis 服务器每秒执行任务的频率,包括定期删除在内的后台任务。默认值为 10,意味着每秒检查 10 次过期键。
  • maxmemory-samples:在定期删除时,Redis 用于估算过期键分布的采样数量。默认值为 5,表示检查5个键来决定是否继续检查更多键。
  • activedefrag(主动碎片整理):开启后,Redis 会尝试在内存碎片较多时进行碎片整理,有助于释放被碎片化的过期键占用的空间。

通过监控 Redis 的内存使用情况、过期键数量以及服务器性能指标,可以适时调整这些参数以达到最佳效果。在某些特定场景下,如果对过期键的处理有更严格的要求,还可以考虑使用 Redis 提供的 EXPIRESCAN 命令(Redis 6.0 及以上版本)进行精确控制。

http://www.lryc.cn/news/330218.html

相关文章:

  • MySQL 锁合集与事务隔离级别
  • 题解 -- 第六届蓝桥杯大赛软件赛决赛C/C++ 大学 C 组
  • Lua脚本的使用
  • hcia datacom课程学习(5):MAC地址与arp协议
  • unbuntu mysql8.0新建用户及开启远程连接
  • Intel FPGA (1):线性序列机
  • 翻译: 硅谷软件工程师面试:准备所需的一切
  • 视频推拉流EasyDSS点播平台云端录像播放异常的问题排查与解决
  • kubuntu23.10安装sdl2及附加库和 sfml2.5.1
  • Centos JDK1.8 下载安装
  • iOS开发进阶(十四):xcodebuild 命令应用详解
  • uniapp 开发之原生Android插件
  • 构建第一个JS应用(FA模型)
  • 物联网学习2、MQTT 发布/订阅模式介绍
  • docker--部署 (超详版) (五)
  • 谷粒商城——通过接口幂等性防止重复提交订单
  • 谈谈MVCC机制
  • Linux之用户账号、用户组和与账号有关的系统文件
  • mac 安装 pip,如果你的电脑已经有 python3
  • java 枚举
  • Java学习之类和对象、内存底层
  • 递归遍历目录结构和树状展现
  • 【C++的奇迹之旅(二)】C++关键字命名空间使用的三种方式C++输入输出命名空间std的使用惯例
  • 如何通过针对iOS的动态分析技术绕过反调试机制
  • 33.Python从入门到精通—Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别
  • 便携式气象站是什么
  • AIGC重塑金融:AI大模型驱动的金融变革与实践
  • TP4054替代DP4054锂电池供电电路保护方案
  • 前端JS商品规格组合
  • ⾃定义类型:联合和枚举