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

# Redis 入门到精通(七)-- redis 删除策略

Redis 入门到精通(七)-- redis 删除策略

一、redis 删除策略–过期数据的概念

1、Redis 中的数据特征

Redis 是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态。

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

2、过期的数据真的删除了吗?其实并没有立即删除,而是懒删除。

53-Redis 中的数据特征.png

3、数据删除策略

    1. 定时删除。
    1. 惰性删除。
    1. 定期删除。

二、redis 删除策略–过期数据的底层存储结构

1、redis 时效性数据的存储结构

54-redis时效性数据的存储结构.png

2、数据删除策略的目标

在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降,甚至引发服务器宕机或
内存泄露。

三、redis 删除策略–定时删除与惰性删除

1、定时删除

1)创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作。

2)定时删除 优点:节约内存,到时就删除,快速释放掉不必要的内存占用。

3)定时删除 缺点:CPU压力很大,无论CPU此时负载量多高,均占用CPU,会影响redis服务器响应时间和指令吞吐量。

4)定时删除 总结:用处理器性能换取存储空间 (拿时间换空间)。

55-定时删除.png

2、惰性删除

1)惰性删除: 数据到达过期时间,不做处理。等下次访问该数据时

  • 如果未过期,返回数据。
  • 发现已过期,删除,返回不存在。

2)惰性删除 优点:节约CPU性能,发现必须删除的时候才删除。

3)惰性删除 缺点:内存压力很大,出现长期占用内存的数据。

4)惰性删除 总结:用存储空间换取处理器性能
expireIfNeeded()
(拿时间换空间)。

56-惰性删除.png

四、redis 删除策略–定期删除

1、定时删除和惰性删除两种方案都走极端,有没有折中方案?

答案是肯定的:有。

1) Redis 启动服务器初始化时,读取配置 server.hz 的值,默认为10。
2)每秒钟执行 server.hz 次 serverCron() --> databasesCron()–> activeExpireCycle()。
3)activeExpireCycle() 对每个 expires[] 逐一进行检测,每次执行 250ms/server.hz。
4)对某个 expires[
] 检测时,随机挑选 W 个 key 检测。

  • 如果 key 超时,删除 key。
  • 如果一轮中删除的 key 的数量>W*25%,循环该过程。
  • 如果一轮中删除的 key 的数量≤W25%,检查下一个 expires[],0-15 循环。
  • W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP 属性值。

5)参数 current_db 用于记录 activeExpireCycle() 进入哪个 expires[*] 执行。
6)如果 activeExpireCycle() 执行时间到期,下次从 current_db 继续向下执行。

57-redis定期删除.png

2、定期删除

1)定期删除是:周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度。
2)定期删除特点1:CPU性能占用设置有峰值,检测频度可自定义设置。
3)定期删除特点2:内存压力不是很大,长期占用内存的冷数据会被持续清理。
4)定期删除总结:周期性抽查存储空间(随机抽查,重点抽查)。

3、删除策略比对

    1. 定时删除:节约内存,无占用,不分时段占用CPU资源,频度高,拿时间换空间。
    1. 惰性删除:内存占用严重,延时执行,CPU利用率高,拿空间换时间。
    1. 定期删除:内存定期随机清理,每秒花费固定的CPU资源维护内存,随机抽查,重点抽查。

五、redis 删除策略–逐出策略

1、当新数据进入 redis 时,如果内存不足怎么办?

1)redis 删除策略–逐出策略

Redis 使用内存存储数据,在执行每一个命令前,会调用 freeMemoryIfNeeded() 检测内存是否充足。如
果内存不满足新加入数据的最低存储要求,redis 要临时删除一些数据为当前指令清理存储空间。清理数据
的策略称为逐出算法,也叫淘汰算法。

2)注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间,如果不成功则反复执行。当对所
有数据尝试完毕后,如果不能达到内存清理的要求,将出现错误信息。

(error) OOM command not allowed when used memory >'maxmemory'

2、影响数据逐出的相关配置

1) 最大可使用内存: maxmemory

占用物理内存的比例,默认值为0,表示不限制。生产环境中根据需求设定,通常设置在50%以上。

2)每次选取待删除数据的个数: maxmemory-samples

选取数据时并不会全库扫描,导致严重的性能消耗,降低读写性能。因此采用随机获取数据的方式作为待检测删除数据。

3)删除策略: maxmemory-policy

达到最大内存后的,对被挑选出来的数据进行删除的策略.

3、影响数据逐出的相关配置

1)检测易失数据(可能会过期的数据集 server.db[i].expires )

  • ① volatile-lru:挑选最近最少使用的数据淘汰。
  • ② volatile-lfu:挑选最近使用次数最少的数据淘汰。
  • ③ volatile-ttl:挑选将要过期的数据淘汰。
  • ④ volatile-random:任意选择数据淘汰。

2)检测全库数据(所有数据集server.db[i].dict )。

  • ⑤ allkeys-lru:挑选最近最少使用的数据淘汰。
  • ⑥ allkeys-lfu:挑选最近使用次数最少的数据淘汰。
  • ⑦ allkeys-random:任意选择数据淘汰。

3)放弃数据驱逐。

  • ⑧ no-enviction(驱逐):禁止驱逐数据(redis4.0中默认策略),会引发错误OOM(Out Of Memory)。

4、数据逐出策略配置依据

使用 INFO 命令输出监控信息,查询缓存 hit 和 miss 的次数,根据业务需求调优 Redis 配置。

上一节关联链接请点击:

# Redis 入门到精通(六)-- redis 事务

相关文章:

# Redis 入门到精通(七)-- redis 删除策略

Redis 入门到精通(七)-- redis 删除策略 一、redis 删除策略–过期数据的概念 1、Redis 中的数据特征 Redis 是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态。 XX :具有时效性…...

10:00面试,10:08就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到6月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...

html+canvas 实现签名功能-手机触摸

手机上的效果图 需要注意&#xff0c;手机触摸和鼠标不是一个事件&#xff0c;不能通用&#xff0c;上一篇是关于使用鼠标的样例 相关代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewpo…...

前端组件化探索与实践:Vue自定义暂无数据组件的开发与应用

摘要 随着前端开发技术的不断进步&#xff0c;组件化开发已成为提升开发效率、降低维护成本的关键手段。本文旨在通过介绍一款Vue自定义暂无数据组件的开发与实践&#xff0c;深入探讨前端组件化开发的重要性、优势及其在实际项目中的应用。 一、引言 在前端开发中&#xff0…...

《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境

安装 Visual Studio 2019 配置 MASM环境 下载 Visual Studio Installer安装 Visual Studio 20191. 双击运行2. 自定义安装内容3. 修改 MSVC 工具集版本4. 设置主题&#xff08;可选&#xff09;5. 安装代码高亮插件 AsmDude&#xff08;可选&#xff09;6. 通义灵码&#xff08…...

Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析

Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析 简介 本文档适用于合宙Air780E、Air780EP、Air780EQ、Air201 关联文档和使用工具&#xff1a; 从Ramdump里分析内存泄漏问题 无法抓底层log的情况下如何导出死机dump Luatools下载调试工具 EPAT抓取底层日志 F…...

吴松洋院长 艺后整形集团专家组特约成员 全方位责任塑美

...

前端经验:使用sheetjs导出CSV文本为excel

应用场景 很多web表格组件没有提供直接的导出excel功能&#xff0c;但提供了导出CSV的功能。 如果能想办法拿到CSV的内容&#xff0c;就可以利用sheetjs生成excel并导出。 实施步骤 1.拿到CSV的内容字符 每种表格组件都有各自的CSV生成方法&#xff0c;不管用什么方法&…...

【nnUNetv2进阶】十五、nnUNetv2 魔改网络-小试牛刀-引入ECA

nnunet使用及改进教程。 【nnUNetv2实践】一、nnUNetv2安装 【nnUNetv2实践】二、nnUNetv2快速入门-训练验证推理集成一条龙教程 【nnUNetv2进阶】三、nnUNetv2 自定义网络-发paper必会-CSDN博客 其他网络改进参考: 【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入…...

centos(或openEuler系统)安装kafka集群

安装192.168.9.60、192.168.9.61、192.168.9.62这3台kafka集群&#xff08;kraft模式&#xff0c;不用zookeeper&#xff09; 不带密码的 1.每台机器安装kafka&#xff1a; cd /home/kafka wget https://downloads.apache.org/kafka/3.3.1/kafka_2.13-3.3.1.tgz 不通就换这…...

HarmonyOS根据官网写案列~ArkTs从简单地页面开始

Entry Component struct Index {State message: string 快速入门;build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width(100%).textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily(HarmonyHeiTi-Bold).lineHeight(33)Scroll() {Column() {Ba…...

GraphRAG+ollama+LM Studio+chainlit

这里我们进一步尝试将embedding模型也换为本地的&#xff0c;同时熟悉一下流程和学一些新的东西 1.环境还是用之前的&#xff0c;这里我们先下载LLM 然后你会在下载nomic模型的时候崩溃&#xff0c;因为无法搜索&#xff0c;无法下载 解决办法如下lm studio 0.2.24国内下载…...

【中项第三版】系统集成项目管理工程师 | 第 5 章 软件工程② | 5.4 - 5.8

前言 第 5 章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于技术的内容&#xff0c;学习要以教材为准。 目录 5.4 软件实现 5.4.1 软件配置管理 5.4.2 软件编码 5.4.3 软件测试 5.5 部署交付 5.5.1 软件部署 5.5.2 软件交付 5.5.3 持续交付 5.5.4…...

6. dolphinscheduler-3.0.0伪集群部署

环境说明&#xff1a; 主机名&#xff1a;cmc01为例 操作系统&#xff1a;centos7 安装部署软件版本部署方式centos7zookeeperzookeeper-3.4.10伪分布式hadoophadoop-3.1.3伪分布式hivehive-3.1.3-bin伪分布式clickhouse21.11.10.1-2单节点多实例dolphinscheduler3.0.0单节…...

防火墙内容安全综合实验

一、实验拓扑 二、实验要求 1&#xff0c;假设内网用户需要通过外网的web服务器和pop3邮件服务器下载文件和邮件&#xff0c;内网的FTP服务器也需要接受外网用户上传的文件。针对该场景进行防病毒的防护。 2&#xff0c;我们需要针对办公区用户进行上网行为管理&#xff0c;要…...

常见的数据分析用例 —— 信用卡交易欺诈检测

文章目录 引言数据集分析1. 读入数据并快速浏览2.计算欺诈交易占数据集中交易总数的百分比3. 类别不平衡对模型的影响3.1 总体思路&#xff08;1&#xff09;数据的划分&#xff08;2&#xff09;训练模型&#xff08;3&#xff09;测试模型&#xff08;4&#xff09;解决不平衡…...

IP地址:由电脑还是网线决定?

IP地址&#xff1a;由电脑还是网线决定&#xff1f; 在互联网时代&#xff0c;IP地址是我们进行网络通信的基础。然而&#xff0c;对于IP地址究竟是由电脑决定还是由网线决定的问题&#xff0c;不少人可能存在疑惑。本文将从IP地址的定义、分配方式以及影响因素等方面进行探讨…...

如何定位及优化SQL语句的性能

在数据库管理和优化中&#xff0c;定位并解决SQL语句的性能问题是至关重要的。MySQL通过EXPLAIN命令提供了强大的工具来查看SQL语句的执行计划&#xff0c;这是定位性能瓶颈和优化SQL语句的首要步骤。以下是如何利用执行计划来定位及优化SQL语句性能问题的详细指南。 一、使用…...

SentenceTransformers (SBERT)

文章目录 一、关于 SBERT特点预训练模型应用实例 二、安装开发设置 三、入门使用四、训练五、Cross Encoder 一、关于 SBERT 官方文档&#xff1a;https://www.sbert.net/github : https://github.com/UKPLab/sentence-transformerspaper : Sentence-BERT: Sentence Embedding…...

第三届智能机械与人机交互技术学术会议(IHCIT 2024)

【北航主办丨本届SPIE独立出版丨已确认ISSN号】 第三届智能机械与人机交互技术学术会议&#xff08;IHCIT 2024&#xff09; 2024 3rd International Conference on Intelligent Mechanical and Human-Computer Interaction Technology 2024年7月27日----中国杭州&#xff0…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...