没有合适的资源?快使用搜索试试~ 我知道了~
面试官:Redis 过期删除策略和内存淘汰策略有什么区别?.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 13 浏览量
2022-07-09
18:56:35
上传
评论
收藏 1.02MB DOC 举报
温馨提示
试读
17页
面试官:Redis 过期删除策略和内存淘汰策略有什么区别?.doc
资源推荐
资源详情
资源评论
面试官:Redis 过期删除策略和内存淘汰策略有什么区别?
笔者:小林 coding
计算机八股文网站:
大家好,我是小林。
Redis 的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然
都是做删除的操作,但是触发的条件和使用的策略都是不同的。
今天就跟大家理一理,「内存淘汰策略」和「过期删除策略」。
发车!
过期删除策略
Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,
而做这个工作的就是过期键值删除策略。
如何设置过期时间?
先说一下对 key 设置过期时间的命令。 设置 key 过期时间的命令一共有 4 个:
expire :设置 key 在 n 秒后过期,比如 expire key 100 表示设置 key 在 100 秒后过
期;
pexpire :设置 key 在 n 毫秒后过期,比如 pexpire key2 100000 表示设置 key2 在 100000
毫秒(100 秒)后过期。
expireat :设置 key 在某个时间戳(精确到秒)之后过期,比如 expireat key3 1655654400
表示 key3 在时间戳 1655654400 后过期(精确到秒);
pexpireat :设置 key 在某个时间戳(精确到毫秒)之后过期,比如 pexpireat key4
1655654400000 表示 key4 在时间戳 1655654400000 后过期(精确到毫秒)
当然,在设置字符串时,也可以同时对 key 设置过期时间,共有 3 种命令:
set ex :设置键值对的时候,同时指定过期时间(精确到秒);
set px :设置键值对的时候,同时指定过期时间(精确到毫秒);
setex :设置键值对的时候,同时指定过期时间(精确到秒)。
如果你想查看某个 key 剩余的存活时间,可以使用 TTL 命令。
#设置键值对的时候,同时指定过期时间位 60 秒
>setexkey160value1
OK
#查看 key1 过期时间还剩多少
>ttlkey1
(integer)56
>ttlkey1
(integer)52
如果突然反悔,取消 key 的过期时间,则可以使用 PERSIST 命令。
#取消 key1 的过期时间
>persistkey1
(integer)1
#使用完 persist 命令之后,
#查下 key1 的存活时间结果是-1,表明 key1 永不过期
>ttlkey1
(integer)-1
如何判定 key 已过期了?
每当我们对一个 key 设置了过期时间时,Redis 会把该 key 带上过期时间存储到一个过
期字典(expires dict)中,也就是说「过期字典」保存了数据库中所有 key 的过期时间。
过期字典存储在 redisDb 结构中,如下:
typedefstructredisDb{
dict*dict;/*数据库键空间,存放着所有的键值对*/
dict*expires;/*键的过期时间*/
....
}redisDb;
过期字典数据结构结构如下:
过期字典的 key 是一个指针,指向某个键对象;
过期字典的 value 是一个 long long 类型的整数,这个整数保存了 key 的过期时间;
过期字典的数据结构如下图所示:
字典实际上是哈希表,哈希表的最大好处就是让我们可以用 O(1) 的时间复杂度来快速查
找。当我们查询一个 key 时,Redis 首先检查该 key 是否存在于过期字典中:
如果不在,则正常读取键值;
如果存在,则会获取该 key 的过期时间,然后与当前系统时间进行比对,如果比系统时
间大,那就没有过期,否则判定该 key 已过期。
过期键判断流程如下图所示:
剩余16页未读,继续阅读
资源评论
书博教育
- 粉丝: 1
- 资源: 2837
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功