Redis学习(十二)Redis的三种删除策略

news2024/11/27 7:37:56

目录

    • 一、背景
    • 二、Redis 的三种删除策略
      • 2.1 定时删除(用CPU换内存空间)
      • 2.2 定期删除
      • 2.3 惰性删除(用内存换CPU性能)
    • 三、总结

一、背景

我们都知道 Redis 是一种内存数据,所有的数据均存储在内存中,可以通过 ttl 指令查看数据的状态:

  • xx:表示具有时效性的数据。
  • -1:表示永久性的数据。
  • -2:表示过期的数据,或已经删除的数据,或未定义的数据。

但是 过期的数据真的被删除了吗?

  • 在 Redis 的执行过程中,会让 CPU 处理很多的指令,CPU 可能会一下子处理不过来,这样就需要区分优先级了。
  • 很明显 Redis 的 key 过期删除操作没有那么重要,所以就先不删除,继续保存在内存中。
  • 那什么时候删除呢?这就是 Redis 的删除策略做的事了。

删除策略的目标: 就是 在内存和 CPU 占用之间找到一个平衡,在 CPU 空闲的时候再去删除过期的数据,防止出现 CPU 过载导致服务器宕机、内存泄漏等问题


二、Redis 的三种删除策略

Redis 有以下三种删除策略:定时删除、

2.1 定时删除(用CPU换内存空间)

实现方式: 创建一个定时器,每间隔一段时间,定时器会 对全量 key 的扫描,并删除过期的 key。

  • 优点: 节约内存,可以定期立即释放掉所有不必要的内存空间。
  • 缺点: CPU 的压力会很大,不会考虑删除的时候 CPU 是否空闲,会影响 Redis 服务器的响应时间和吞吐量。
  • 应用场景: 适用于对数据过期时间要求不高,数据量较小的场景。

2.2 定期删除

实现方式:redis.cactiveExpireCycle() 函数实现,周期性轮询 Redis 库中的时效性数据,采用随机抽取策略,利用过期数据占比的方式控制删除的频率。

  • Redis 启动服务器初始化时,读取配置 server.hz 的值,默认为10。
  • 每秒钟执行 server.hz 次 serverCron() -> databaseCron() -> activeExpireCycle()
  • activeExpireCycle() 对每个 expires[*] 逐一进行检测,每次执行 250ms/server.hz。
  • 对某个 expires[*] 检测时,随机挑选 W 个 key 检测:
    • 如果key超时,删除 key;
    • 如果一轮中删除的 key 的数量 > W * 25%,循环该过程;
    • 如果一轮中删除的 key 的数量 ≤ W * 25%,检查下一个 expires[*],0~15循环;
    • W 取值 = ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP 属性值。
  • 参数 current_db 用于记录 activeExpireCycle() 进入了哪个 expires[*] 执行。
  • 如果 activeExpireCycle() 执行时间到期,下次从 current_db 继续向下执行。
  • 优点:
    1. CPU 性能占用设置有峰值,检测频率可自定义设置,相对于定时删除,可以更灵活地控制 CPU占用,适用于数据量较大的情况。
    2. 内存压力不是很大,长期占用内存的冷数据会被持续清理。
  • 缺点: 可能会导致短时间内部分内存无法及时释放,对系统性能有一定影响。
  • 应用场景: 适用于数据量较大、对内存占用没有特别要求的场景。

补充: 定期删除函数的运行频率,在 Redis 2.6 版本中,规定每秒运行 10次,大概 100ms 运行一次。在 Redis 2.8 版本后,可以通过修改配置文件 redis.confhz 选项来调整这个次数。

在这里插入图片描述

2.3 惰性删除(用内存换CPU性能)

实现方式: 数据到达过期时间,不做处理。等下次访问该数据时,发现未过期,则返回值,发现已经过期,删除 expires 空间和 key 值,并返回不存在。

  • 优点: 节约 CPU 性能,当数据必须删除的时候才删除。
  • 缺点: 内存压力较大,会出现过期数据长期占用内存的情况。
  • 应用场景: 适用于对数据过期时间要求不严格、对内存占用要求宽松的场景。

三、总结

Redis 采用的是 定期删除 + 惰性删除 的策略。

注意:删除策略只是一种策略,在 Redis 并 不能通过修改配置文件的方式进行切换,Redis 中删除策略的具体实现是通过 内存淘汰机制 实现。

整理完毕,完结撒花~🌻





参考地址:

1.Redis删除策略,https://blog.csdn.net/xiaobai_mantou/article/details/107191137
2.Redis中常见的三种删除策略,https://blog.csdn.net/qq_44577699/article/details/134965409
3.Redis删除策略详解和Redis核心配置(简单详细,谁看谁知道),https://www.cnblogs.com/lxl01/p/14995601.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1796772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用于精准治疗和预防细菌感染的生物功能脂质纳米颗粒

引用信息 文 章:Biofunctional lipid nanoparticles for precision treatment and prophylaxis of bacterial infections. 期 刊:Science Advances(影响因子:13.6) 发表时间:2024年4月5日 作 者&a…

Deploy PostgreSQL12 for Centos 7

介绍 PostgreSQL是一种对象-关系型数据库管理系统,由加州大学伯克利分校计算机系开发,以POSTGRES,4.2版本为基础。 PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版…

C++ - 查找算法 和 其他 算法

目录 一. 查找算法: 1.顺序查找: 2.二分查找: 二. 其他算法: 1.遍历算法: 2.求和、求平均值等聚合算法。 a.求和算法: b.求平均值算法: 一. 查找算法: 1.顺序查找&#xff1…

【十大排序算法】冒泡排序

在排序的大海上,冒泡排序像一朵花朵般绽放, 每个元素都像是水珠,跃动在涟漪的波浪中。 它们轻轻上浮,与周围的元素相比较, 若自身更大,便悄然交换位置。 这是一场缓慢的舞蹈,每一步都小心翼翼&…

【工作流】 工作流相关概念及Activiti基本介绍

目录 工作流作用工作流的几个要素应用具体应用场景 工作流系统工作流系统的组成部分:都有哪些工作流系统 工作流引擎工作流引擎的特点:都有哪些工作流引擎 工作流、工作流引擎、工作流系统三者区别ActivitiActiviti的主要特点发展历史优缺点优点&#xf…

【Linux操作系统】进程状态(1)

🎉博主首页: 有趣的中国人 🎉专栏首页: Linux 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好,本片文章将会讲解 Linux操作系统 进程状态 的相关内容。 如果看到最后您觉得这篇文章…

AXI Quad SPI IP核AXI4接口下的三种操作模式

当选择Enable Performance Mode选项时,AXI4接口包括在内。在该模式下,IP核可以在增强模式下操作(未选择启用XIP模式)或XIP模式(选择启用XIP模式)。在性能模式下,AXI4接口用于在DTR和DRR位置的突…

网络编程(UPD和TCP)

//发送数据 //UDP协议发送数据 package com.example.mysocketnet.a02UDPdemo;import java.io.IOException; import java.net.*;public class SendMessageDemo {public static void main(String[] args) throws IOException {//发送数据//1.创建DatagramSocket对象(快递公司)//…

机器学习-降维算法,PCK,LDA,NMF,LLE

目录 一:数据降维 二:PCA降维算法 1.概念 2.算法原理: 3.降维流程: 4.如何找到方差最大的方向 5.降维公式: 1.协方差和散度矩阵: 2.特征值分解矩阵原理 3.SVD分解矩阵原理 6.PCA算法的两种实现方法: 1.基于特征值分解协方差矩阵实现PCA算法 2. 基于SVD分解协…

面试成功的不二法门:详解Vue3答题章法

前言 面试题在网络上有如海洋之深,对于同一知识点,每个人的理解也各有千秋。我们在面试中常常会遇到一个瞬息间脑海里一片空白的情况,其实这并不是因为我们不懂,而是因为我们在回答的时候缺乏一个清晰的思路。那么问题来了&#x…

服务器远程连接工具有哪些?

【天联】是一款功能强大的服务器远程连接工具,它可以让用户通过网络远程连接到目标服务器,实现远程操作和管理。【天联】的使用场景非常广泛,特别适用于以下几个领域: 零售、收银软件应用的远程管理:【天联】可以结合医…

Ubuntu22.04之解决:terminal使用alt+1/alt+2/alt+3失效问题(二百三十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

我的名字叫大数据: 第7章 我的自拍展

7.1 生活瞬间:通过数据图像呈现 数据健身达人们!在经过一系列的辛勤锻炼后,是时候来看看我的“自拍展”了。通过数据图像,我们不仅可以更直观地了解数据,还能将复杂的信息以简单而美观的方式呈现出来。在这一节中,我将带你领略各种数据图像的魅力,从色彩缤纷的条形图到…

C#之EntityFramework的应用

目录 1,名词概述。 2,实体数据模型EDM介绍。 3,规范函数。 4,查看Linq转换成的SQL语句。 5,数据的增删改查。 5.1,数据查询 5.2,数据插入 5.3,数据更新 5.4,数据…

go语言接口之接口值

概念上讲一个接口的值,接口值,由两个部分组成,一个具体的类型和那个类型的值。它们 被称为接口的动态类型和动态值。对于像Go语言这种静态类型的语言,类型是编译期的概 念;因此一个类型不是一个值。在我们的概念模型中…

MySQL-权限管理(二)

一 host中的含义 /usr/local/mysql/bin/mysql -pLXYlxy2:024.#8u} -S /data/mysql/tmp/mysqld.sock select user,host,authentication_string from mysql.user; %:主要允许从任何主机连接到MySQL服务器,即外部连接localhost: 代表只允许本地主机连接到MySQL服务器&…

spring boot2.7.x遇到问题

validation报错 高版本已移除了validation以来&#xff0c;需手动添加 <dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId> </dependency>mybatis报错 升级版本 <dependency>&…

07-指针的概念与引用,索引

指针的概念与引用&#xff0c;索引 一、内存地址 字节&#xff1a; 定义&#xff1a; 字节&#xff08;byte&#xff09;是内存容量的一个单位&#xff0c;一个字节包含8个位&#xff08;bit&#xff09;。 地址&#xff1a; 定义&#xff1a; 内存地址是系统为了方便区分…

物流装备企业太多,恶性竞争,2024年的新出路在哪里?

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 之前写过一篇文章&#xff0c;关于中国有N多家物流装备企业&#xff0c;从列表中可猜测&#xff0c;行业内竞争惨烈。可以点击查看此篇 中国物流…

当代中国获奖的知名作家信息管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;作家管理&#xff0c;作品管理&#xff0c;论坛管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;论坛&#xff0c;公告&#x…