Redis过期删除策略和内存淘汰策略

news2024/11/25 7:00:52

目录

  • 一、面试题
  • 二、Redis内存满了怎么办
    • 2.1 结论
  • 三、redis里写的数据如何删除的?
    • 3.1 三种不同的删除策略
      • 3.1.1 立即删除
      • 3.1.2 惰性删除
      • 3.1.3 定期删除
      • 3.3.4 总结
  • 四、redis缓存淘汰策略
    • 4.1 有哪些
    • 4.2 你平时用哪一种
  • 五、总结

一、面试题

生产上你们你们的redis内存设置多少?
如何配置、修改redis的内存大小
如果内存满了你怎么办
redis清理内存的方式?定期删除和惰性删除了解过吗
redis缓存淘汰策略
redis的LRU了解过吗

二、Redis内存满了怎么办

1.查看Redis最大占用内存
打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型,注意转换。
在这里插入图片描述
2.redis默认内存多少可以用?
在这里插入图片描述
3.一般生产上你如何配置?
一般推荐Redis设置内存为最大物理内存的四分之三
4.如何修改redis内存设置
通过修改文件配置
在这里插入图片描述
通过命令修改
在这里插入图片描述
5.什么命令查看redis内存使用情况?

info memory

6.真要打满了会怎么样?如果Redis内存使用超出了设置的最大值会怎样?
改改配置,故意把最大值设为1个byte试试
在这里插入图片描述
在这里插入图片描述

2.1 结论

1.设置了maxmemory的选项,假如redis内存使用达到上限
2.没有加上过期时间就会导致数据写满,maxmemory为了避免类似情况,引出内存淘汰策略

三、redis里写的数据如何删除的?

面试题
如果一个键是过期的,那它到了过期时间之后是不是马上就从内存中被被删除呢??

如果回答yes,立即删除,你自己走还是面试官送你?
如果不是,那过期后到底什么时候被删除呢??是个什么操作?

3.1 三种不同的删除策略

3.1.1 立即删除

Redis不可能时时刻刻遍历所有被设置了生存时间的key,来检测数据是否已经到达过期时间,然后对它进行删除。

立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力,让CPU心累,时时需要删除,忙死。。。。。。。
这会产生大量的性能消耗,同时也会影响数据的读取操作。

总结:对CPU不友好,用处理器性能换取存储空间

3.1.2 惰性删除

数据到达过期时间,不做处理。等下次访问该数据时,
如果未过期,返回数据 ;
发现已过期,删除,返回不存在。

惰性删除策略的缺点是,它对内存是最不友好的。

如果一个键已经过期,而这个键又仍然保留在redis中,那么只要这个过期键不被删除,它所占用的内存就不会释放。
在使用惰性删除策略时,如果数据库中有非常多的过期键,而这些过期键又恰好没有被访问到的话,那么它们也许永远也不会被删除(除非用户手动执行FLUSHDB),我们甚至可以将这种情况看作是一种内存泄漏–无用的垃圾数据占用了大量的内存,而服务器却不会自己去释放它们,这对于运行状态非常依赖于内存的Redis服务器来说,肯定不是一个好消息

3.1.3 定期删除

定期删除策略是前两种策略的折中:
定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响。

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

举例:

redis默认每个100ms检查,是否有过期的key,有过期key则删除。注意:redis不是每隔100ms将所有的key检查一次而是随机抽取进行检查(如果每隔100ms,全部key进行检查,redis直接进去ICU)。因此,如果只采用定期删除策略,会导致很多key到时间没有删除。

定期删除策略的难点是确定删除操作执行的时长和频率:如果删除操作执行得太频繁,或者执行的时间太长,定期删除策略就会退化成立即删除策略,以至于将CPU时间过多地消耗在删除过期键上面。如果删除操作执行得太少,或者执行的时间太短,定期删除策略又会和惰性删除束略一样,出现浪费内存的情况。因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除操作的执行时长和执行频率。

定期抽样key,判断是否过期
漏网之鱼

3.3.4 总结

Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,服务器可以很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡。

1 定期删除时,从来没有被抽查到
2 惰性删除时,也从来没有被点中使用过
上述2步骤======> 大量过期的key堆积在内存中,导致redis内存空间紧张或者很快耗尽

四、redis缓存淘汰策略

4.1 有哪些

  • noeviction: 不会驱逐任何key
  • allkeys-lru: 对所有key使用LRU算法进行删除
  • volatile-lru: 对所有设置了过期时间的key使用LRU算法进行删除
  • allkeys-random: 对所有key随机删除
  • volatile-random: 对所有设置了过期时间的key随机删除
  • volatile-ttl: 删除马上要过期的key
  • allkeys-lfu: 对所有key使用LFU算法进行删除
  • volatile-lfu: 对所有设置了过期时间的key使用LFU算法进行删除

总结一下怎么记住这8个
2 * 4 得8
2个维度

过期键中筛选
所有键中筛选

4个方面

LRU
LFU
random
ttl

4.2 你平时用哪一种

平常使用allkeys-lru
系统默认的是noeviction
在这里插入图片描述

五、总结

  • Redis 使用的过期删除策略是「惰性删除+定期删除」,删除的对象是已过期的 key。

  • 内存淘汰策略是解决内存过大的问题,当 Redis 的运行内存超过最大运行内存时,就会触发内存淘汰策略

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

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

相关文章

第三章-OpenCV基础-8-绘图函数

前置内容 这篇内容不是本书内容,但后续用的到,特做记录。 使用OpenCV中不可避免需要用到各种绘图功能,比如绘制人脸库、显示人脸识别信息,那就需要用到OpenCV的绘图函数,这些函数包括cv2.line(), cv2.circle(),cv2.rectangle()…

Lazada如何做好店铺运营?产品定价是关键

1.东南亚各国状况一览(对比中国) 2.东南亚消费水平真的很低? 精准定价的意义:定价过高,失去核心竞争力;定价过低,亏本对市场失去信心;价格改动,流量下降 定价公式&#…

MySQL实战解析底层---日志系统:一条SQL更新语句是如何执行的

目录 前言 重要的日志模块:redo log 重要的日志模块:binlog 两阶段提交 前言 MySQL 可以恢复到半个月内任意一秒的状态,这是怎样做到的呢?从一个表的一条更新语句说起,下面是这个表的创建语句,这个表有…

【个人总结】Mongodb安装下载

【个人总结】MongDB安装下载1、下载2、安装3、创建数据库文件的存放位置4、配置5、创建文件6、安装mongodb服务7、测试1、下载 官网下载地址:https://www.mongodb.com/try/download/community-kubernetes-operator,选择对应版本,我这里是3.6…

大数据之Hudi数据湖_大数据治理_简介_发展历史_特性_应用场景---大数据之Hudi数据湖工作笔记0001

支持hive spark flink 美国公司开发的~ 都在使用,这些企业都在用 支持hadoop的,更新,插入,删除 和数据增量处理 支持流式数据处理. hive是离线数仓 hive不支持事物 insert overwrite 底层后来通过这种方式支持了事物 insert overwrite处理数据很低效,因为更新是基于覆盖实现…

2023年,软件测试怎么样?

2022年因为各种不可抗力原因,大厂裁员,失业等等频频受到关注。 不解释,确实存在,各行各业都很难,但是,说软件测试行业不吃香,我还真不认同(不是为培训机构说好话,大环境…

计算神经网络参数量Params、计算量FLOPs(亲测有效的3种方法)

1.stat(cpu统计) pip install torchstat from torchstat import statstat(model, (3, 32, 32)) #统计模型的参数量和FLOPs,(3,32,32)是输入图像的size 结果: 问题:当网络中有自定义参数时&am…

龙蜥LoongArch架构研发全揭秘,龙芯开辟龙腾计划技术合作新范式

编者按:在开源新基建加快建设的背景下,越来越多的企业选择加入龙蜥社区,当前社区生态合作伙伴已突破 300 家。于是,龙蜥社区能为加入的企业提供哪些支持成为越多伙伴们更加关注的话题。本文将以龙蜥社区和龙芯中科联合研发龙蜥 Lo…

Webpack-好文

webpack是一个前端资源加载/打包工具,会根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源Webpack打包js文件创建一个文件夹,cmd进入到终端,运行npm install -g webpack webpack-cli安装webpack we…

三、work queues(多进程消费一个队列)

1、轮训分发消息 在这个案例中我们会启动两个工作线程,一个消息发送线程,我们来看看他们两个工作线程是如何工作的。 1.1 抽取工具类 public class RabbitMqUtils {//得到一个连接的channelpublic static Channel getChannel() throws Exception {//创…

探寻世界:用Python获取照片的地理定位信息

目录 步骤: 源代码: 代码说明: 报错1: 解决方法1: 报错2: 解决方法2: 效果如下所示: 验证效果如下: 一、步骤: 要从 JPEG 图像中获取经纬度信息&…

投票页面制作线上投票活动制作网络投票制作关注投票制作

现在来说,公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评选活动既可以给用户发挥的空间激发参与的热情,又可以让商家和企业实现推广的目的&…

2023上海国际电商物流包装产业展览会相约上海

2023年7月5-7日 | 上海新国际博览中心 同期举办:2023上海国际快递物流产业博览会 指导单位:上海市邮政管理局 中国快递协会 主办单位:上海市快递行业协会 上海市仓储与配送行业协会 上海市物流协会 承办单位:上海信世展览服务有…

【NLP相关】GPT-X合集:GPT类模型介绍(附相关论文和Github项目地址)

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

哈希一致性算法(分布式服务器落点算法)

场景预设和一般hash算法: 先预设一个场景,有10000份文件,需要缓存到五台缓存服务器之上 那么按照最常规,每个服务器平均分配2000份文件 那么用一个取余操作就可以完成 比如说是第2513的图片,那么用一个公式 需要缓…

HTML概述与基本标签

🌟所属专栏:HTML只因变凤凰之路🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该系列将持续更新HTML的相关学习笔记,欢迎和我一样的小白订阅,一起学习共同进步~👉文章简…

simplifyEnrichment | 让我来做你的富集结果的瘦身教练吧!~

1写在前面 最近真是烦心啊,事事不顺,找个日子我要找大师算一卦。😂 大家基本都会做富集分析,但有时候terms实在太多,读起来真是累,也搞不清到底谁是其中相对重要的。🥲 之前有一些R包通过计算基…

【告别篇】大家好,再见了,我转行了,在筹备创业

前言 相信大家也一直看到我的博客没有更新过了,我其实很久没有打开过博客了,也就意味着我很长一段时间都在停滞不前,没有了学习的动力。 现在我上来是想跟大家告个别 : 很多粉丝宝宝的私信我看了,但是没有回&#xf…

并查集结构

文章目录并查集特点构建过程查找两个元素是否是同一集合优化查找领头元素设置两个元素为同一集合构建结构应用场景并行计算集合问题并查集特点 对于使用并查集构建的结构,可以使得查询两个元素是否在同一集合,以及合并集合的操作无限接近O(1) 构建过程…

Intellij idea使用Statistic统计代码行数的方法

一、安装Statistic1、打开IDEA2、打开settings进行设置3、选择plugins,搜索Statistic并安装4、下载完成之后,重启IDEA,此时Statistic就安装好了二、使用Statistic1、安装好Statistic之后我们可以通过以下步骤 将Statistic插件的控制台展示出来…