redis 过期删除策略(redis过期机制)

过期删除策略redis可以对key的通用设置中,可以设置key的过期时间及ttl如果单纯的再client中进行命令测试的话,会发现了当时间到时间后再去获取该key会显示nil那么一个key过期了,那么它实际是在什么时候删除的呢?当然这个删除也不是简单的到期了就直接被删除了redis中对于过期键的过期删除策略定时删除惰性删除定期删除定时删除它会在设置键的过期时间的同时,创建一个定时器,当键到了过期时间,定时器会立即对键进行删除。这个策略能够保证过期键的尽快删除,快速释放内存空间

大家好,又见面了,我是你们的朋友全栈君。

过期删除策略

redis可以对key的通用设置中,可以设置key的过期时间及ttl

如果单纯的再client中进行命令测试的话,会发现了当时间到时间后

再去获取该key会显示nil

那么一个key过期了,那么它实际是在什么时候删除的呢?

当然这个删除也不是简单的到期了就直接被删除了

redis中对于过期键的过期删除策略

  • 定时删除
  • 惰性删除
  • 定期删除
定时删除

它会在设置键的过期时间的同时,创建一个定时器, 当键到了过期时间,定时器会立即对键进行删除。 这个策略能够保证过期键的尽快删除,快速释放内存空间。
在这里插入图片描述
但是有得必有失,redis的操作频率是非常高的。绝大多数的键都是携带过期时间的,这样就会造成出现大量的定时器执行,严重降低系统性能

总的来说:该策略对内存来说十分的友好,但对cpu来说非常不友好,会拉低系统的性能,因此不建议使用

惰性删除

为了解决定时删除会占用大量CPU资源的问题, 因此产生了惰性删除。

它不持续关注key的过期时间, 而是在获取key时,才会检查key是否过期,如果过期则删除该key。简单来说就是:平时我不关注你,我用到你了,我才关注你在不在。
在这里插入图片描述
总的来说:惰性删除对CPU足够友好,但是对内存空间非常不友好,会造成大量内存空间的浪费

定期删除

定期删除,顾名思义,就是每隔一段时间进行一次删除

  • 如果删除操作执行次数过多、执行时间太长,就会导致和定时删除同样的问题:占用大量cpu资源去进行删除操作
  • 如果删除操作次数太少、执行时间短,就会导致和惰性删除同样的问题:内存资源被持续占用,得不到释放。

所以定时删除最关键的就在于执行时长和频率的设置
在这里插入图片描述

  • 默认每秒运行10次会对具有过期时间的key进行一次扫描,但是并不会扫描全部的key,因为这样会大大延长扫描时间。
  • 每次默认只会随机扫描20个key,同时删除这20个key中已经过期的key。
  • 如果这20个key中过期key的比例达超过25%,则继续扫描。

参数配置

默认每秒扫描10次,我们可以在redis的配置文件中进行更改
在这里插入图片描述
对于hz参数,官方不建议超过100,否则会把cpu造成比较大的压力

内存淘汰策略

为什么需要内存淘汰策略

可以思考两个问题

  • 通过惰性+定期删除,能不能百分百避免过期key没有被删除的情况?
  • 当大量插入插入到redis,但内存空间不足时,redis会如何处理呢?

有一些已经过期的key,定期扫描一直都没有扫描到它,而且这些key也一直没有被使用。 那么它们就会一直在内存中存在。同时继续向Redis不断插入新数据,最终造成内存空间不足的问题。

​ 对于这种问题的解决,就用到了内存淘汰策略

策略详解

当客户端执行命令,添加数据时,Redis会检查内存空间大小,如超过最大内存,则触发内存淘汰策略
在这里插入图片描述
在Redis中默认提供了三类八种淘汰策略。
在这里插入图片描述
这里我们可以看到两个名称:lrulfu,他俩是什么意思呢?

他们的学名叫做:数据驱逐策略。 其实所谓的驱逐就是将数据从内存中删除掉

  • lru:Least Recently Used,它是以时间为基准,删除最近最久未被使用的key。
  • lfu:Least Frequently Used,它是以频次为基准,删除最近最少未被使用的key。

redis默认使用noeviction,我们可以通过修改redis.confmaxmemory-policy属性值设置不同的内存淘汰策略。

不同策略的使用场景

1、Redis只做缓存,不做DB持久化,使用allkeys。如状态性信息,经常被访问,但数据库不会修改。

2、同时用于缓存和DB持久化,使用volatile。如商品详情页。

3、存在冷热数据区分,则选择LRU或LFU。如热点新闻,热搜话题等。

4、每个key被访问概率基本相同,选择使用random。如企业内部系统,访问量不大,删除谁对数据库也造成太大压力。

5、根据超时时间长久淘汰数据,选择选用ttl。如微信过期好友请求。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127819.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 渗透测试网站_zz二测

    渗透测试网站_zz二测分享一个ZPL指令在线测试网址http://labelary.com/viewer.html

    2022年10月29日
  • clion激活码2021.4_通用破解码

    clion激活码2021.4_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • mediumtext java类型_编辑框不支持MEDIUMTEXT数据类型[通俗易懂]

    mediumtext java类型_编辑框不支持MEDIUMTEXT数据类型[通俗易懂]我的原始需求是:MySQL8表字段是MEDIUMTEXT,新增、修改记录时报错实现过程中遇到的问题:java.lang.RuntimeException:当前数据类型无法匹配数据库字段类型:MEDIUMTEXT,请更换其它常用类型或自定义类型转换器atcom.eova.core.type.Convertor.getJavaType(Convertor.java:74)atcom.eova….

  • 高精度快速阶乘算法

    高精度快速阶乘算法    我在业余时间开发了一套《超大整数完全精度快速算法库》HugeCalc,可快速计算超大整数的加、减、乘、除(商/余)、乘方、开方,也可快速计算大数的Fibonacci数列、(双)阶乘、排列、组合等,还可完成超大整数数组的最大公约数、最小公倍数等数论运算,现在,该套软件已被华军、天空、电脑之家、天天等下载站点收录。    自在网上公开以来,广受网友关注,经常有网友来联系,想交流一些算法心

  • 软件开发视频资源分享[通俗易懂]

    软件开发视频资源分享[通俗易懂]资源分享资源均来源于网络,在自学/开公众号的时候收集而来。如果侵权请联系我,会第一时间删除。如果链接已失效(我也无办法,很多链接我是没有保存在自已的网盘中的,见谅)。Java基础Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xbJava毕向东:可以到往B站找,已上传到B站Java刘意:链接:https://pan.bai…

  • bowtie 加mn标签_Bowtie 比对「建议收藏」

    bowtie 加mn标签_Bowtie 比对「建议收藏」【Bowtie】DNA序列拼接的原理【Jenny点评】我一直以为Bowtie是一个短序列拼接工作,实际上这是错误的。它不是序列拼接工作,只是一个序列比对的工具。最后的结果是相对index而言,对各个短序列进行定位。——————短序列比对的原理如何?目前有哪些常用的短序列比对软件?okhttp://blog.sina.com.cn/s/blog_9617895f01011n…

    2022年10月27日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号