redis中通用命令以及key过期策略

通用命令

exists

判断某个key是否存在。

exists key

时间复杂度:O(1)
返回值:key 存在的个数。
在这里插入图片描述

del

删除指定的 key,可以一次删除一个或者多个。

del key

时间复杂度:O(1)
返回值:删除掉的 key 的个数。
在这里插入图片描述

expire

为指定的key删除过期时间,以秒为单位。

 EXPIRE key seconds

时间复杂度:O(1)
返回值:1 表⽰设置成功。0 表⽰设置失败。
在这里插入图片描述
时间到后,指定的key就会被删除。

pexpire 是设置毫秒级别的定时

ttl

获取指定 key 的过期时间,秒级。

ttl key

时间复杂度:O(1)
返回值:剩余过期时间。-1 表⽰没有关联过期时间,-2 表⽰ key 不存在。

在这里插入图片描述

pttl是支持毫秒级别的查询的

type

返回 key 对应的数据类型。

type key

时间复杂度:O(1)
返回值: none , string , list , set , zset , hash and stream .。

redis中key的数据类型都是string,value会存在多种数据类型。

在这里插入图片描述

定时器

在某个时间到达之后,执行指定任务。

基于优先级队列或者堆实现的

在redis过期key的场景中,依据过期时间越早,优先级就越高。现在假定有很多快要过期的key,把这些key加入到优先级队列中,按照过期时间早的先出队列,队首元素就是最早要过期的key。
此时定时器中,只需要分配一个扫描线程,去检查队首元素是否过期即可。次时只需要关注队首元素即可,扫描对首元素也不能过于频繁,可以根据当前时间与队首元素过期时间设置一个等待时间,等时间到了之后再去唤醒这个线程。
添加新任务时,可唤醒一下刚才的线程,然后重新检查队首元素,计算等待时间。

基于时间轮实现的定时器

把时间划分为很小段,划分的长度根据需求而定。每一小段都挂着一个链表,每个链表都代表一个要执行的任务。
在这里插入图片描述
指针会隔固定时间间隔去尝试执行格子上链表中的任务。

redis中并没有采取上述两种方案。

redis中的过期策略

定期删除

每次抽取一部分,检验过期时间。
redis是单线程工作,主要的任务是处理每个命令的任务,所以为保证不阻塞,每次只检查一部分保证执行足够快。

惰性删除

有些key已经到了过期时间,但key暂时还是存在,紧接着后面访问到这个key了,先执行删除key操作,同时再返回一个nil。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手插口袋谁也不爱♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值