Redis——数据过期策略

devtools/2025/1/17 8:20:33/

文章目录

  • 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.ppmy.cn/devtools/146448.html

相关文章

Spire.PDF for .NET【页面设置】演示:重新排列 PDF 中的页面

对于页面顺序混乱的 PDF 文档&#xff0c;重新排列页面可以避免读者感到困惑&#xff0c;还可以使文档更有条理。本文将演示如何使用Spire.PDF for .NET以编程方式重新排列现有 PDF 文档中的页面。 Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、…

服务器与电脑主机各自的优势

人们经常认为服务器与电脑主机是同一种网络设备&#xff0c;但是两者之间还是有着明显的区别的&#xff0c;服务器是为了处理大量数据信息和网络服务所设计的&#xff0c;一般用于数据中心或者是大型的企业环境当中&#xff1b;电脑主机则是面向个人用户&#xff0c;主要用于日…

ADC(模拟数字转化器)

一、工作原理&#xff1a; 简单介绍&#xff1a; ADC 用于将模拟值从现实世界转换为数字值&#xff0c;如1和0。那么这些模拟值是什么&#xff1f;这些是我们在日常生活中看到的&#xff0c;比如温度、速度、亮度等。但是ADC 能否将温度和速度直接转换为0和1等数字值&#xff…

mysql-二进制安装方式

目录 1. 安装组件即依赖包 2. 创建用户 3. 关闭防火墙 4. 解压mysql二进制源码包 5. 创建文件夹并赋予权限 6. 编译安装mysql&#xff0c;安装完成最后面&#xff0c;会有一串英文&#xff0c;那是登录数据库的密码 7. 设置配置文件 8. 将mysql添加进环境变量 9. 复制…

1_H5视频播放器-1 -- [前端开发之道:通过实例掌握编程思维]

1.写一个最简单的 html5 网页 创建一个最简单的 HTML5 网页只需要包含最基本的结构&#xff0c;包括 <!DOCTYPE html> 声明、<html> 标签、<head> 和 <body> 部分。下面是一个非常基础的 HTML5 网页示例&#xff0c;它展示了网页的基本结构和一些基本…

智源研究院与安谋科技达成战略合作,共建开源AI“芯”生态

12月25日&#xff0c;智源研究院与安谋科技&#xff08;中国&#xff09;有限公司&#xff08;以下简称“安谋科技”&#xff09;与正式签署战略合作协议&#xff0c;双方将面向多元AI芯片领域开展算子库优化与适配、编译器与工具链支持、生态系统建设与推广等一系列深入合作&a…

如何在 Ubuntu 上安装 PyTorch

简介 PyTorch 因其易用性、动态计算图和高效性而日益流行&#xff0c;成为实现深度学习模型的首选。如果你想探索这个工具并学习如何在 Ubuntu 上安装 PyTorch&#xff0c;本指南将对你有所帮助&#xff01; 在本教程中&#xff0c;我们将引导你完成在 Ubuntu 系统上使用 Pip…

力扣-数据结构-2【算法学习day.73】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…