前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >redis 过期删除策略(redis过期机制)

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

作者头像
全栈程序员站长
发布于 2022-07-25 12:44:30
发布于 2022-07-25 12:44:30
2.5K0
举报

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

过期删除策略

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。如微信过期好友请求。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Redis之过期key的淘汰及缓存淘汰策略解读
我们都知道在Redis 所有的数据结构都可以设置过期时间,时间一到,就会自动删除。想象一下里面有一个专门删除过期数据的线程,如果数据已过期就立马删除。这个时候可以思考一下,会不会因为同一时间太多的 key 过期,以至于线程忙不过来。同时因为 Redis 是单线程的,删除的时间也会占用线程的处理时间,如果删除的太过于繁忙,会不会导致线上读写指令出现卡顿。
一个风轻云淡
2023/10/15
3450
Redis过期键删除策略及淘汰策略
  Redis的所有键都可以设置过期策略,Redis的每个设置了过期时间的key都会被放在一个独立的字典中,用于遍历删除。
用户7353950
2022/05/10
5650
面试官:聊一聊Redis过期淘汰策略
Redis 是一个开源的使用ANSI C编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
做棵大树
2024/04/09
6850
Redis的过期删除策略和内存淘汰机制
在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时对key进行删除。 优点: 保证内存被尽快释放。 缺点: 1)若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key。 2)定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重。
范蠡
2020/12/15
9850
熟悉Redis吗,那Redis的过期键删除策略是什么
对于Redis,我们业务开发一般都只关心Redis键值对的查询、修改操作,可能因为懒或者只想能用就行,呵呵。很少关心键值对存储在什么地方、键值对过期了会怎么样、Redis有没什么策略处理过期的键、Redis处理过期键又有什么作用?但这些问题却是Java程序员在Redis上进阶的必备知识,不要埋怨Java要学习的系统知识为什么这么多,因为这些确确实实是程序员进阶所必须掌握的。我们往下看看~
JavaSouth南哥
2024/05/08
3250
熟悉Redis吗,那Redis的过期键删除策略是什么
Redis数据淘汰机制
策略 : 在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。
凌云Cloud
2020/10/30
5860
Redis数据淘汰机制
Redis过期策略以及淘汰机制
Redis中可以通过expire设置键的过期,那么Redis又是什么时候删除键的呢?
用户7386338
2020/10/10
5260
Redis6.0.6的三大内存过期策略和八大淘汰策略
Redis在我们日常开发中是经常用到的,Redis也是功能非常强大,可以进行缓存,还会有一些排行榜、点赞、消息队列、购物车等等;当然还有分布式锁Redisson,我们使用肯定少不了集群!小编最近学习到一些内存如果满了Redis是怎么操作呢?肯定像我们JVM一样,有回收或者淘汰的机制!今天小编和大家一起学习一下,小编也是看了阳哥的课,觉得讲的很好,记录一下,希望可以帮助到大家!!
掉发的小王
2022/07/11
4170
Redis 中的过期删除策略和内存淘汰机制
Redis 中 key 的过期删除策略 内存碎片如何产生 碎片率的意义 如何清理内存碎片 内存淘汰触发的最大内存 有哪些内存淘汰策略 内存淘汰算法 LRU LFU 1、定时删除 2、惰性删除 3、定期删除 Redis 中过期删除策略 从库是否会脏读主库创建的过期键 前言 Redis 中 key 的过期删除策略 内存淘汰机制 为什么数据删除后内存占用还是很高 总结 参考 Redis 中 key 的过期删除策略 ◆ 前言 Redis 中的 key 设置一个过期时间,在过期时间到的时候,Redis 是如何清除这个
IT大咖说
2022/04/22
9050
Redis 中的过期删除策略和内存淘汰机制
Redis过期key删除策略以及内存淘汰策略
众所周知,Redis是一种内存级kv数据库,所有的操作都是在内存里面进行,定期通过异步操作把数据库数据flush到硬盘上进行保存。因此它是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作。虽然是内存数据库,但是其数据可以持久化,而且支持丰富的数据类型。
高性能架构探索
2021/04/13
2.1K0
【Redis】Redis 删除策略
Redis中的数据特征:  Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态
终有救赎
2023/10/24
8510
【Redis】Redis 删除策略
Redis的过期策略和内存淘汰策略最全总结与分析
提到内存管理,我们就需要考虑Redis的内存过期策略和内存淘汰机制。该文章便从这两方面入手,分享一些在Redis内存方面相关的基础知识。
兔云小新LM
2020/07/06
1.9K0
Redis的过期策略和内存淘汰策略最全总结与分析
面试必问:redis过期key删除和内存淘汰策略
众所周知,Redis是一种内存级kv数据库,所有的操作都是在内存里面进行,定期通过异步操作把数据库数据flush到硬盘上进行保存。因此它是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作。虽然是内存数据库,但是其数据可以持久化,而且支持丰富的数据类型。
高性能架构探索
2022/08/25
4900
面试必问:redis过期key删除和内存淘汰策略
Redis详解(十一)------ 过期删除策略和内存淘汰策略
  ②、设置完一个键的过期时间后,到了这个时间,这个键还能获取到么?假如获取不到那这个键还占据着内存吗?
IT可乐
2020/06/02
1.5K0
Redis详解(十一)------ 过期删除策略和内存淘汰策略
Redis键过期策略、内存淘汰策略详解
除了string独有设置过期时间的方法,其他类型都需要依靠expire方法设置时间,若:
JavaEdge
2022/11/30
1.1K0
Redis键过期策略、内存淘汰策略详解
Redis内存淘汰和过期删除策略原理分析
Redis是一个内存键值对数据库,所以对于内存的管理尤为重要。Redis内部对于内存的管理主要包含两个方向,过期删除策略和数据淘汰策略。 思考:
政采云前端团队
2023/10/25
4840
Redis内存淘汰和过期删除策略原理分析
Redis过期--淘汰机制的解析和内存占用过高的解决方案
Redis在我们平时的开发或者练习的时候,往往很容易忽略一个问题,那就是我们的Redis内存占满的问题。但是在真是的商业开发中,Redis的实际占满是真正会存在这样的问题的。那么如果Redis在某一刻占满内存,我们又没有对它进行相应的设置它会出现什么情况呢?会不会导致我们整个因为使用Redis而整个业务垮掉?
码农编程进阶笔记
2021/07/20
6290
Redis的过期策略和内存淘汰策略配置说明
一旦内存使用达到上限,Redis会根据选定的回收策略(参见:maxmemmory-policy)删除key
兔云小新LM
2019/12/05
2.1K0
Redis的过期策略和内存淘汰策略配置说明
Redis的过期键删除策略和数据逐出策略
在实际生产环境中使用Redis时,偶然会觉得Redis的内存占用要比自己预想的大。事实上,Redis占用的内存除了保存键值对所需的开销外,还有一些运行时产生的额外内存,包括:
全菜工程师小辉
2019/08/16
1.7K0
Redis-内存回收
  Reids 所有的数据都是存储在内存中的,在某些情况下需要对占用的内存空间进行回收。内存回收主要分为两类,一类是 key 过期,一类是内存使用达到上限(max_memory)
会说话的丶猫
2020/10/27
1.3K0
Redis-内存回收
相关推荐
Redis之过期key的淘汰及缓存淘汰策略解读
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文