redis 设置expire=0和直接调用delete删除key的区别

背景

问题起源于生产上应用redis做的一个临时缓存的场景,调用方首先调用某个容器的生成接口,该接口会生成临时缓存的数据放到redis中,然后调用方在调用获取数据内容的接口从任何一台容器中获取放置在redis中的临时数据。

还原问题场景

由于临时数据仅仅只是为了在第二步获取数据内容时从任一个容器都可以访问到,所以临时数据需要删除,因此应用设计了一个单独线程来清理临时redis数据的内容,一开始清理逻辑时判断临时数据放到redis的时间是否已经超过了3S,如果是,那么直接删除,后来,有同事反馈说,我们不能这么删除,因为我们没法保证临时数据在3s内肯定调用方已经调用完获取数据的接口获取到数据,所以保险起见,我们用expire设置过期时间为1s,这样相当于临时数据至少存活4S,更充分的保证调用方已经调用获取数据接口获取到了数据,于是我们的应用这样上线了,但是刚上线没多久,Redis就告警内存不足,于是就有了这次关于expire设置过期时间的工作原理的记录

redis.expire工作原理

expire设置一个很短的过期时间 和 直接delete相比有什么不一样呢? delete能及时回收redis的内存,那么expire为什么不能及时回收内存呢?这里就要讲到了redis是如何清理过期数据的,首先redis会使用惰性删除和定时清理的策略删除过期的key

惰性删除
所谓的惰性删除策略是指当访问redis的某个过期的redis的key时,redis会直接删除过期的key,并回收过期key所占据的内存

定时删除策略
Redis服务器默认每隔100ms过期检查一次数据库,检查的间隔可以通过Redis.conf进行配置,每次过期检查都会执行以下操作
1.首先从所有设置了过期时间的的key集合中随机抽取20个候选的key,判断key是否过期,如果过期,那么就进行删除并且回收内存,并记录下20个候选key中总共有多少个key过期了
2.如果步骤一中过期的key的数量/20个候选key的数量的占比大于25%,那么继续循环删除,否则等待下一轮的循环检查
不过为了防止有大量的key要删除导致的redis卡死,每一轮循环Redis设置了最长的删除流程的上限不超过25ms,超过则等待下一轮检查

总结

从上述Redis对过期时间的key的清理策略可知,当短时间内有大量的key过期,并且很多是大key时,redis服务器是来不及删除这么多的过期key的,如果此时新的key不断的生成,而过期的key来不及及时删除,此时就可能导致redis内存不足. 那回到一开始的问题,为什么你使用delete直接删除不会导致redis内存问题呢?首先一方面是delete删除可以直接回收内存,而且由于是客户端来进行删除,只有在删除之后才会再次申请新的redis的key,所以相当于也变相的把新key的生成速度降低了,这两者综合导致redis内存并没有被打爆

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

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

相关文章

华为数通智选交换机S5735S-L24T4S-QA2无法SSH远程访问

以前都是按照华为S5700交换机开启SSH远程访问方法配置不同网段通过静态路由实现互通,华为S5700交换机开启ssh远程登陆,现在新买的华为数通智选交换机S5735S-L24T4S-QA2,也是按照这步骤配置,令人不解的是,竟然无法ssh访问,仔细看了配置也没有发现问题,在华为eNSP模拟器上验…

初识mysql数据库之复合查询

目录 一、多表查询的概念 二、笛卡尔积 1. 笛卡尔积的概念 2. 笛卡尔积使用案例 2.1 显示雇员名、雇员工资以及所在部门的名字 2.2 显示部门号为10的部门名,员工名和工资 2.3 显示所有员工的姓名、工资和工资级别 3. 自连接 3.1 自连接的概念 3.2 自连接案…

微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明

微信小程序中的条件渲染和列表渲染 1. 条件渲染1.1. 语法格式 (wx:if, wx:elif ,wx:else)1.2. block标记1.3. hidden属性1.4. wx:if 与 hidden 的对比 2. 列表渲染2.1. wx:for 语法格式 及 wx:key的使用 1. 条件渲染 1.1. 语法格式 (wx:if, wx:elif ,wx:else) <view wx:if…

MachineLearningWu_13_AGI

AGI的全称是artificial general intelligence&#xff0c;通用人工智能&#xff0c;而我们现在做的关于医学影像的分析&#xff0c;可以说完全是ANI。 而我们使用MLP对于大脑中神经网络的模拟更是完全不同于人类大脑的行为。

如何开发一个软件

一、软件开发流程 1. 需求分析 主要有两个文档&#xff0c;一个需求规格说明书和一个产品原型图 2. 设计 UI设计、数据库设计、接口设计 3. 编码 项目代码编写、单元测试 4. 测试 测试用例、测试报告 5. 上线运维 软件环境安装、配置 二、角色分工 项目经理 对整个…

flutter开发实战-Running Gradle task ‘assembleDebug‘ 的解决方法

flutter开发实战-Running Gradle task ‘assembleDebug‘ 的解决方法 使用Android studio经常出现Running Gradle task ‘assembleDebug‘问题&#xff0c;记录一下解决方法。 一、在Android目录下更改build.gradle 将repositories中的google(), mavenCentral() repositori…

IIS 部署的应用禁用HTTP TRACE / TRACK方法【原理扫描】

远程Web服务器支持TRACE和/或TRACK方法。 TRACE和TRACK是用于调试Web服务器连接的HTTP方法。 直接在网站Web.config文件中进行如下操作&#xff1a;在Web.config中的<system.webServer>节点内添加以下配置即可&#xff1a; <security> <requestFiltering> &…

数据结构day2(2023.7.15)

一、Xmind整理&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;定义车的信息&#xff1a;品牌&#xff0c;单价&#xff0c;颜色&#xff0c;车牌号 struct Car{char name[20]; //品牌int price; //单价char color[10] //颜色char id[20] //车牌…

XXF(x-forwarded-for)

IP伪造 TCP/IP层面的IP伪造很难实现&#xff0c;因为更改后很难实现正常的TCP通信&#xff0c;但在HTTP层面的伪造就显得很容易。可以通过伪造XFF头进行IP伪造 XFF字段 X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTT…

MySQL基础

MySQL基础 数据库基础&#xff08;重点&#xff09;一.登陆选项的认识二.什么是数据库三.见一见数据库四.主流数据库五.服务器、数据库、表之间的关系六.MySQL架构七.SQL分类八.存储引擎 数据库基础&#xff08;重点&#xff09; 一.登陆选项的认识 mysql -h 127.0.0.1 -P 33…

计算机网络 day5 子网划分 - IP包 - arp协议

目录 子网划分 为什么需要子网划分&#xff1f; 我们为什么不直接使用一个A类的IP地址给一家2000人的公司使用呢&#xff1f; 子网划分本质 子网划分的步骤&#xff1a; 实验&#xff1a;将192.168.1.0/24 划分为4个小网段 --》192.168.1.0/26 减少的IP地址去哪里了&…

“深入了解API和Python的完美结合:构建强大、灵活的应用程序“

引言&#xff1a; 在当前科技高速发展的时代&#xff0c;应用程序是各行各业的重要组成部分。而API&#xff08;Application Programming Interface&#xff09;作为不同系统之间实现通信和数据交换的桥梁&#xff0c;具有至关重要的作用。而Python作为一种强大而灵活的编程语言…

【C++】位图和布隆过滤器

文章目录 位图概念难点代码 布隆过滤器概念插入查找删除优缺点代码 位图 概念 所谓位图&#xff0c;就是用每一个比特位位来存放某种状态&#xff0c;适用于海量数据&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。 给40亿个不重复的无符号整数&#xff…

RestFul风格讲解

以前是localhost:8080/user?methodadd&uid1; RestFul风格是以/接上的 localhost:8080/user/马云/6562 package com.qf.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annot…

【华为机试】HJ17 坐标移动详解+完整源代码示例

忙碌了一周&#xff0c;一直没时间更新&#xff0c;趁着周末来更新第二个题目。 题目 题目解析 这个题目相比于上一个题目来说&#xff0c;会简单一些&#xff0c;不涉及到那些复杂的算法&#xff0c;就是对于字符串的处理。 算法步骤 输入一个字符串根据分号&#xff0c;将…

《银行法律法规》三、银行管理——1、银行管理基础

第一章 银行管理基础 第一节 商业银行的组织架构 考点1 商业银行组织架构的内涵★★ 含义 商业银行组织架构是银行各部分按照一定的排列顺序、 空间位置、 聚集状态、 联系方式以及各部分之间相互关系组成的一个有机系统。 这个系统涉及商业银行前台、 中台、 后台业务运…

大数据有哪些应用领域?

常见的大数据应用领域&#xff1a; 1、理解客户满足客户服务需求 大数据应用目前在这领域是最广为人知的。通过大数据分析更好的了解客户以及用户的爱好和行为。企业非常喜欢通过在线客服系统搜集用户社交方面的数据、浏览器的日志、各类文本和传感器的数据&#xff0c;从而更…

【C语言】扫雷----详解(扩展版)

&#x1f341; 博客主页:江池俊的博客_CSDN博客 &#x1f341; 如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏&#x1f31f; 三连支持一下博主&#x1f49e; ✉️每一次努力都是一次进步&#xff0c;每一次尝试都是一次机会。无论遇到什么困难&#xff0c;…

【MySQL】SQL入门(一)

&#x1f697;MySQL学习起始站~ &#x1f6a9;本文已收录至专栏&#xff1a;数据库学习之旅 ❤️每章节附章节思维导图&#xff0c;文末附全文思维导图&#xff0c;感谢各位点赞收藏支持~ 一.引入 (1) SQL分类 SQL语句&#xff0c;根据其功能&#xff0c;主要分为四类&#x…

【GPT模型】遥感云大数据在灾害、水体与湿地领域中的应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…