【redis过期删除】


redis过期删除

redis的键可以设置过期时间,但是并不是每个键一到过期时间就会立即删除,redis不可能给每个设置过期时间的key上添加一个定时器来监视是否过期,CPU根本承受不了如此多的定时线程

注意:我使用的版本是6.0.10,不同版本可能略有差别

删除策略

存在的删除策略:

  • 定时删除 在设置键的同时创建定时器,过期时间到了就执行对键的删除,这种策略对内存使用率有优势,但是占用CPU资源太多
  • 定期删除 每隔特定时间对数据库进行一次扫描,检测并删除其中过期的键值对
  • 惰性删除 键值对过期暂时不进行删除,当获取键时先查看是否已经过期,过期则进行删除,这种策略可能会由于一些过期key一直没有被访问,浪费一定的内存

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

定期删除是指每隔一段时间去检查是否有过期的key,如果有则删除

惰性删除是指在获取key的时候检查一下这个key是否过期

定期删除的配置是hz(默认是10,即每秒十次扫描)

首先客户端在尝试访问某个key的时候,redis会检查是否过期,如果过期则删除,但是有些key是不会被访问到的,redis的定期删除则会进行扫描并删除过期的key

  1. 从过期字典里随机抽取20个key
  2. 删除这20个key中已经过期的key
  3. 如果过期的比例超过25%,则重复步骤一

过期的key过多会导致循环抽取删除,为防止过度循环,增加了扫描时间的上限,默认不超过25ms

应该避免同一时刻大量key同时过期

在主从结构中,从服务器就算读取到过期键也不会删除,只有接收到主服务器发来的del命令之后才会删除

淘汰机制

配置最大内存的大小,如果超过该内存大小,就会使用淘汰机制进行淘汰

confmaxmemory 100mb

也可以通过命令进行修改

shell127.0.0.1:6380> config set maxmemory 50mb
OK
127.0.0.1:6380> config get maxmemory
1) "maxmemory"
2) "52428800"

由于使用定期删除+惰性删除机制,但是也可能很多过期的没有被删除掉导致内存不足的情况,所以redis存在淘汰机制

  • volatile-lru -> Evict using approximated LRU, only keys with an expire set 当内存不足时,设置了过期时间的键,选取最近最少使用的键抛弃(Least Recently Used)
  • allkeys-lru -> Evict any key using approximated LRU 当内存不足时,对于所有的键,选取最近最少使用的键抛弃(Least Recently Used)
  • volatile-lfu -> Evict using approximated LFU, only keys with an expire set 当内存不足时,设置了过期时间的键,选取最少频率使用的键抛弃(Least Frequently Used)
  • allkeys-lfu -> Evict any key using approximated LFU 当内存不足时,对于所有的键,选取最少频率使用的键抛弃(Least Frequently Used)
  • volatile-random -> Remove a random key having an expire set 当内存不足时,对于设置过期时间的键,随机选取键抛弃
  • allkeys-random -> Remove a random key, any key 当内存不足时,对于所有的键,随机选取键抛弃
  • volatile-ttl -> Remove the key with the nearest expire time (minor TTL) 当内存不足时,抛弃最近要过期的键
  • noeviction -> Don’t evict anything, just return an error on write operations 默认策略,不淘汰,如果内存已满,写操作返回错误

在使用volatile-lfu、volatile-random、volatile-ttl时,如果没有key可以淘汰,则与noeviction一样在写操作时返回错误

获取当前的内存策略

shellconfig get maxmemory-policy

可以在配置文件修改

confmaxmemory-policy noeviction

也可以使用命令设置

shellconfig set maxmemory-policy noeviction

在进行LRU/LFU/TTL淘汰策略时,并不是那么准确,可以通过采样率来进行设置其准确度,默认是5,即随机选出5个key,然后淘汰掉里面最近最少使用的key。

当设置为10的时候就非常接近真正的LRU算法了,但是会消耗更多的CPU,5已经是足够好的结果了

confmaxmemory-samples 5

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

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

相关文章

618必抢清单:内存升级国货更强,DDR5劲爆大白菜

随着数字时代的加速发展,平时在PC上玩游戏、办公的时候,电脑性能对我们的影响越来越打。相比于CPU、显卡等硬件,内存对于电脑性能的重要性也很高,而且可以通过更低的成本来升级。内存就像是电脑的神经网络,影响着CPU数…

linux中unattended-upgr是什么,如何关闭

unattended-upgrades 是 Ubuntu 操作系统自动更新软件包的一个进程。它默认开启,定期检查可用更新并自动升级。 要关闭 unattended-upgrades 进程,您可以执行以下步骤: 进入命令窗口。 输入以下命令并运行: sudo systemctl st…

超强生图模型,抢先体验!

文生图模型Stable Diffusion 3 Medium开源啦!优刻得GPU云主机目前已上线该模型镜像,开箱即用,即刻体验!具体操作见文末。 近年来,生成式人工智能的快速发展正在改变我们的生活。作为这一领域的前沿技术之一&#xff0…

成都跃享未来教育咨询解锁新篇章

在快节奏的现代社会中,每个人都在追求着属于自己的非凡人生。而成都跃享未来教育咨询,正是那个能够智慧引领你走向成功、成就非凡人生的灯塔。 跃享未来教育咨询,位于历史悠久的文化名城成都,这里不仅有丰富的文化底蕴&#xff0c…

Score Matching(得分匹配)

Score Matching(得分匹配)是一种统计学习方法,用于估计概率密度函数的梯度(即得分函数),而无需知道密度函数的归一化常数。这种方法由Hyvrinen在2005年提出,主要用于无监督学习,特别…

python-03

使用File操作文件 open(file, moder, buffering-1,encodingNone, errorsNone, newlineNone, closefdTrue, openerNone) file:要打开的文件 mode:文件打开模式。默认访问模式是读(r) buffering:缓冲区大小 encodin…

【proteus仿真】基于51单片机的电压检测系统

【proteus仿真】基于51单片机的电压检测系统 资料下载地址:关注公众号 小邵爱电子 获取 1.前言 使用51单片机和ADC模块设计一个数字电压表,将模拟信号0~5V之间的电压转换为数字量信号,并通过LED实时显示电压数据 、 2.仿真原理图 3.硬件…

java的深拷贝和浅拷贝

总结: 深拷贝:无论是基本类型还是引用类型都会创建新的实例。 浅拷贝:对于基本类型就是复制其值,对于引用类型则是复制了指向这些数据类型的内存地址。 浅拷贝(Shallow Copy) 浅拷贝是指在创建新对象时&am…

AI写代码,CS还有前途吗?加州大学伯克利分校:CDSS申请人数激增48%!

目录 01 CS入学人数暴涨 02 人类Coder可堪大任 03 AI还没有学会创新 04 编程与农耕不同 AI写了这么多代码,你还应该学习计算机科学吗? 新的数据显示,学生们仍然热衷于选修计算机科学:加州大学伯克利分校(UCB&#…

低代码组件扩展方案在复杂业务场景下的设计与实践

组件是爱速搭的前端页面可视化模块的核心能力之一,它将前端研发人员从无休止的页面样式微调和分辨率兼容工作中解放了出来。 目前,爱速搭通过内置的上百种功能组件(120),基本可以覆盖大部分中后台页面的可视化设计场景…

如何安全进行亚马逊、沃尔玛测评?

在亚马逊、沃尔玛、速卖通、阿里国际站等电商平台上,测评已成为一种高效的推广手段,但伴随的风险也不容忽视。这些风险主要源于平台严格的大数据风控机制,它涵盖了多个方面,以确保评价的真实性和合规性。 首先,硬件参数…

如何以银行客户为中心实现自动化,并创造更顺畅的客户体验?

在当今社会,客户已习惯于通过几次点击就能迅速得到所需,但银行业的客户旅程仍然因为延误、错误、隐藏费用和资金可获取性问题而显得繁琐。试问,您上一次向他人推荐自己的银行、保险公司或税务局提供的优质服务是何时? 无论是购车…

EXCEL数据导入HIVE

引言 本文将论述如何将Windows本地的excel表数据,导入到虚拟机Linux系统中的Hadoop生态中的Hive数据仓库中。 实验准备 DBeaver Hive3.1(Hadoop3.1) excel数据表 实验步骤 一、首先打开虚拟机,启动Hadoop,启动hive,启动hiveserver2,连接DBeaver,成功连接展示如下…

游戏类APP选对开发框架很重要,Uni-app和Cocos Creator如何选?

开发游戏app,选择使用Uniapp和Cocos Creator这两种不同的技术平台开发时,需要考虑和比较这两者间的区别和差距。 Unity被公认为3D游戏开发的首选,它拥有成熟的3D开发工具和海量资源。华服巨作《王者荣耀》就是基于Unity引擎打造。而Cocos作为…

详解 HBase 的常用 API

一、环境准备 创建一个 Maven 工程并引入依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>1.3.1</version> </dependency> <dependency><groupId>org.apach…

详细描述拍立淘接口的实现过程,包括接口设计、开发、测试、部署等关键步骤

拍立淘接口的实现过程可以详细分为以下几个步骤&#xff1a; 注册与权限获取&#xff1a; 注册成为阿里巴巴开放平台开发者&#xff0c;并创建应用。获取API的调用权限和密钥&#xff08;如AppKey和AppSecret&#xff09;&#xff0c;这些密钥将用于后续的身份验证和请求签名。…

Text2SQL之Vanna优化

文章目录 前言一、优化方向二、干就完了一次性生成多个Question-SQL对先生成一个问题,再根据DDL和业务数据生成SQL总结前言 前阵子写了篇Text2SQL的简单介绍,发现其也是RAG只会,写下了Text2SQL之不装了,我也是RAG 最近也一直在做Text2SQL的优化,于是把自己的一些心得,总…

QSpinBox、QDoubleSpinBox 的使用,进制转换

实现目的 使用QSpinBox、QDoubleSpinBox 实现数量*单价&#xff0c;float结果显示 使用QSpinBox、QDoubleSpinBox 实现进制的转换 拟实现界面 布局 垂直布局、groupBox中为栅格布局 控件进制设置属性 displayIntegerBase 16代表16进制 #include "spinboxexample.h" #…

SpringMVC的控制器方法的一些要点

一、控制器类的注解 1、SpringMVC的控制器类&#xff0c;一般用注解Controller来注释&#xff0c;代表该类是控制器类。 2、如果整个控制器都采用响应体数据返回&#xff0c;那么可以用组合注解 RestController。 二、控制方法的注解 (一)映射请求路径 1、RequestMapping注解…

Algorithm Data Management Cube(ADM-Cube)本科生招募

Algorithm & Data Management Cube&#xff08;算法与数据管理研究小组&#xff0c;A&DM-Cube, http://www.adm-cube.online/ &#xff09;是隶属于天津大学管理与经济学部信息管理与管理科学系/复杂管理系统实验室的研究团队。为了进一步加强团队建设&#xff0c;推动…