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

Redis——数据过期策略

文章目录

  • 1. 引入
  • 2. 数据过期策略
    • 2.1 策略一:惰性删除
      • 2.1.1 原理
      • 2.1.2 优点
      • 2.1.3 缺点
    • 2.2 策略二:定期删除
      • 2.2.1 原理
      • 2.2.2 模式
      • 2.2.3 优点
      • 2.2.4 缺点
    • 2.3 两种策略的比较
  • 3. 总结


1. 引入

Redis 是一个 高性能 的非关系型数据库,由于 Redis 的数据被保存在 内存 中,所以会比 MySQL 这种把数据保存在 磁盘 中的数据库的性能高很多。但是内存不像磁盘那样存储空间特别大,内存的大小一般不超过 1T,而 1/2/4T 的磁盘倒很常见,所以在使用内存时就不能像使用磁盘一样随意,不能将大量数据 无限期 地缓存。

所以,缓存在 Redis 中的数据需要有过期时间,一旦过期时间到了,Redis 就会清理它,而 Redis 清理这些过期数据使用的策略就是本文要讲的内容——数据过期策略,即 Redis 清理过期数据的方式

2. 数据过期策略

2.1 策略一:惰性删除

2.1.1 原理

当操作 (读/写) 一个键时,Redis 才检查这个键是否过期,如果过期就删除它

2.1.2 优点

  • 消耗的 CPU 资源较少:相较第二种策略,本策略不会定期检查键是否过期,而只在操作一个键时才检查,所以消耗的 CPU 资源较少。

2.1.3 缺点

  • 消耗的 内存 资源较多:如果一个键过期,但没有被操作,则不会通过惰性删除的方式清理这个键,这些没有被操作的过期键会浪费内存资源。

2.2 策略二:定期删除

2.2.1 原理

Redis 定期随机抽取一些键,检查这些键是否过期,批量删除过期的键

注:在定期删除策略中,Redis 不会一次性查看所有键的过期情况,因为这样太浪费时间了,而是在设置了过期时间的键中随机抽取一部分出来,查看这部分键是否过期。

2.2.2 模式

定期删除策略分为两种模式:

模式SLOW 模式FAST 模式
执行频率默认 10hz
(1s 内执行 10 次)
不固定,但两次执行间隔 ≥ 2ms
每次执行耗时≤ 25ms≤ 1ms

注:

  • 可以通过配置 redis.confhz 来调整 SLOW 模式定期删除的执行频率。例如 hz 20 表示 1s 内执行 20 次。但不要将其设置得过大或过小,因为过高的执行频率会占用过多的 CPU 资源;过低的执行频率会占用过多的内存资源,从而和惰性删除类似。
  • 定期删除会阻塞 Redis 的主进程,和 Java 在 GC (Garbage Collecting,垃圾收集) 时 STW (Stop The World) 类似,防止业务操作影响 清理过期键/垃圾收集。然而一般不会让 清理过期键/垃圾收集 这种操作过多地阻塞 业务操作,所以需要 限制 清理过期键/垃圾收集 的耗时,从而尽量减少对 Redis 主进程/Java 程序中的业务 的影响。

2.2.3 优点

  • 比较灵活:本策略可以通过调整 hz 参数来配置 SLOW 模式定期删除的执行频率,这时根据 服务器的性能业务需求 配置合理的执行频率,从而在 CPU 和 内存 资源的消耗上达到相对平衡。
  • 消耗的 内存 资源较少:相较第一种策略,本策略删除过期数据的时机大概率会早一些,从而减少对 内存 资源的占用。

2.2.4 缺点

  • 消耗的 CPU 资源较多:本策略需要定期检查一部分键是否过期,如果配置了不合理的执行频率,则可能消耗较多的 CPU 资源。

2.3 两种策略的比较

数据过期策略惰性删除定期删除
原理在操作时检查键是否过期,如果过期就删除定期随机抽取部分键,检查过期情况,
批量删除过期键
消耗的 CPU 资源较少,只需要在操作时检查过期较多,需要定期检查过期情况
<具体和执行频率有关>
消耗的 内存 资源较多,只会在操作时删除过期键较少,定期删掉过期键
<具体和执行频率有关>

Redis 通过 同时使用这两种策略 来发挥各个策略的优势,进而平衡 CPU 和 内存 的消耗。

3. 总结

Redis 的数据过期策略指的是 Redis 清理过期数据的方式,共有两种:

  • 惰性删除:在操作时检查键是否过期,如果过期就删除。占用的 CPU 资源相对较少。
  • 定期删除:定期随机抽取部分键,检查过期情况,批量删除过期键。有两种具体的定期删除模式——SLOW 和 FAST 模式,可以通过 hz 调整 SLOW 模式定期删除的执行频率,从而平衡 CPU 和 内存 资源的占用。

http://www.kler.cn/a/455556.html

相关文章:

  • 【RabbitMQ高级篇】消息可靠性问题(1)
  • 基于springboot校园招聘系统源码和论文
  • Ribbon
  • springboot 配置跨域访问
  • SuperMap iDesktopX填补三维可视化地图海岸地形
  • mysql返回N/A
  • 分析redis双检锁
  • Linux增加回收站功能
  • springcloud篇1(微服务技术栈、服务拆分与远程调用、Eureka、Nacos)
  • 【前端】整理部分语法 支持的最低版本浏览器
  • 从 x86 到 ARM64:CPU 架构的进化与未来
  • Java开发框架大比拼:若依、Jeesite与jeecgBoot的深度对比与实战案例分析
  • 助你通过AI培训师中级考试的目录索引
  • 【ANGULAR网站开发】初始环境搭建
  • Chromium GN 目标指南 - view_example 表单示例 (八)
  • elasticsearch安全认证
  • R 和 Origin 完成细菌 OTU 表、土壤理化性质数据的微生物 Beta 多样性分析
  • 多因子模型连载
  • 零信任安全体系研究
  • 抖音生活服务商系统源码怎么搭建?
  • gesp(二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵
  • 面试场景题系列:设计限流器
  • elementUI——upload限制图片或者文件只能上传一个——公开版
  • 新浪微博大数据面试题及参考答案(数据开发和数据分析)
  • 加强版第十七章空间色彩转换
  • 水电站视频智能监控系统方案设计与技术应用方案