内容简介:讲到redis的过期删除策略,就不得不说一下redis是如何判断键是否过期,让我们首先来了解下redis内部结构是如何存储键与过期时间之间的关系在过期字典dict的键是一个指针,指向键对象;值是一个long long类型的整数,保存了其键的过期时间(毫秒精度的UNIX时间戳)
讲到 redis 的过期删除策略,就不得不说一下redis是如何判断键是否过期,让我们首先来了解下redis内部结构是如何存储键与过期时间之间的关系
过期字典
在 redisServer
结构中存储着一个 expires
字典(key-value),专门用来存储过期时间,如下所示:
typedef struct redisDb { // 字典类型,用于保存键的过期时间 dict *expires; } redisDb;
过期字典dict的键是一个指针,指向键对象;值是一个long long类型的整数,保存了其键的过期时间(毫秒精度的UNIX时间戳)
因为是字典类型key-value,所以查询的时间复杂度为 O(1)
,当我们需要判断redis的键是否过期时,只需要从过期字典里面取出键所对应的值,如果键不存在,则表示没有过期;如果键存在,则判断值与当前的时间戳的大小,大于当前时间戳则不过期,小于则过期;
现在让我们来谈谈redis删除策略
删除策略
redis有三种过期删除策略: 定时删除
、 惰性删除
、 定期删除
-
定时删除:在设置键的过期时间的同时,创建timer定时器,当键快过期时执行删除操作
-
惰性删除:当每次获取键时,检查获取的键是否过期,如果过期则删除该键
- 定期删除 :每隔一段时间,redis就会对数据库进行一次检查,删除里面的过期键
优缺点
这三种过期删除策略的优缺点如下:
策略 | 优点 | 缺点 |
---|---|---|
定时删除 | 对内存友好,因为总是能及时删除过期键 | 对CPU不友好,因为过期键较多的情况可能发生同时删除过期键导致占用太多CPU时间 |
惰性删除 | 对内存不友好,因为如果键过期了,但是没有被访问到,那么就会一直存在于内存中,导致内存占用 | 对CPU友好,因为只有当被访问到才会执行过期判断与删除 |
定期删除 | 折中,跟删除操作的执行时长与频率有关 | 折中,跟删除操作的执行时长与频率有关 |
由此可知,三种过期删除策略都有各自的优缺点,而定期删除是定时删除与惰性删除的折中方案
目前redis服务器采用的是惰性删除与定期删除两种策略,通过配合使用更好地保证CPU时间与内存的平衡
happy coding!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Redis 过期键删除策略
- Redis中删除过期Key的三种策略
- 3分钟干货之redis过期键的删除策略
- MySQL删除操作其实是假删除
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——删除
- 我用 Python 找出了删除我微信的所有人并将他们自动化删除了
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning XML with DOM and Ajax
Sas Jacobs / Apress / 2006-06-05 / USD 39.99
Don't waste time on 1,000-page tomes full of syntax; this book is all you need to get ahead in XML development. Renowned web developer Sas Jacobs presents an essential guide to XML. Beginning XML with......一起来看看 《Beginning XML with DOM and Ajax》 这本书的介绍吧!