内容简介:讲到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 找出了删除我微信的所有人并将他们自动化删除了
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python基础教程
[挪] Magnus Lie Hetland / 袁国忠 / 人民邮电出版 / 2018-2-1 / CNY 99.00
本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表、元组、字符串、字典以及各种语句;然后循序渐进地介绍了一些相对高级的主题,包括抽象、异常、魔法方法、属性、迭代器;此后探讨了如何将Python与数据库、网络、C语言等工具结合使用,从而发挥出Python的强大功能,同时介绍了Python程序测试、打包、发布等知识;最后,作者结合......一起来看看 《Python基础教程》 这本书的介绍吧!