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。

相关推荐

  1. Redis过期key的删除策略

    2024-03-13 03:12:03       14 阅读
  2. Rediskey过期策略是怎么实现的

    2024-03-13 03:12:03       32 阅读
  3. rediskey到了过期时间怎么删除

    2024-03-13 03:12:03       37 阅读
  4. redis过期策略以及内存淘汰机制

    2024-03-13 03:12:03       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-13 03:12:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-13 03:12:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-13 03:12:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-13 03:12:03       18 阅读

热门阅读

  1. MongoDB原理解析

    2024-03-13 03:12:03       20 阅读
  2. Linux添加虚拟卷

    2024-03-13 03:12:03       18 阅读
  3. 防火墙开局配置和技巧

    2024-03-13 03:12:03       22 阅读
  4. mysql根据时间段生成时间

    2024-03-13 03:12:03       19 阅读
  5. Mysql数据库的优点

    2024-03-13 03:12:03       21 阅读
  6. 嵌入式36——TCP

    2024-03-13 03:12:03       18 阅读