加入收藏 | 设为首页 | 会员中心 | 我要投稿 通化站长网 (https://www.0435zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

从经典计算机到量子计算机,弱AI进阶到强AI时代?

发布时间:2021-02-07 15:22:25 所属栏目:传媒 来源:互联网
导读:与ZipList类似,IntSet也是使用的一连串的内存空间,但是不同的是ZipList可以存储二进制的内容,而IntSet只能存储整数;且ZipList存储是无序的,IntSet则是有序的,这样一来,元素个数相同的前提下,IntSet的查询效率会更高。 6. Sorted Set其与Set的功能大致

与ZipList类似,IntSet也是使用的一连串的内存空间,但是不同的是ZipList可以存储二进制的内容,而IntSet只能存储整数;且ZipList存储是无序的,IntSet则是有序的,这样一来,元素个数相同的前提下,IntSet的查询效率会更高。

6. Sorted

Set其与Set的功能大致类似,只不过在此基础上,可以给每一个元素赋予一个权重。你可以理解为Java的TreeSet。与List、Hash、Set一样,其底层的实现也有两种,分别是ZipList和SkipList(跳表)。

初始化Sorted Set的时候,会采用ZipList作为其实现,其实很好理解,这个时候元素的数量很少,采用ZipList进行紧凑的存储会更加的节省空间。当期达到如下的条件时,就会转换为SkipList:

  • 其保存的元素数量的个数小于128个
  • 其保存的所有元素长度小于64字节

6.1 使用

下面的命令中,key代表zset的名字;4代表score,也就是权重;而member就是zset中的key的名称。

  • zadd zadd key 4 member用于增加元素
  • zcard zcard key用于获取zset中的元素的数量
  • zrem zrem key member [...]删除zset中一个或者多个key
  • zincrby zincrby key 1 member给key的权重值加上score的值(也就是1)
  • zscore zscore key member用于获取指定key的权重值
  • zrange zrange key 0 -1获取zset中所有的元素,zrange key 0 -1 withscores获取所有元素和权重,withscores参数的作用是决定是否将权重值也一起返回。其返回的元素按照从小到大排序,如果元素具有相同的权重,则会按照字典序排序。
  • zrevrange zrevrange key 0 -1 withscores,其与zrange类似,只不过zrevrange按照从大到小排序。
  • zrangebyscore zrangebyscore key 1 5,返回key中权重在区间(1, 5]范围内元素。当然也可以使用withscores来将权重值一并返回。其元素按照从小到大排序。1代表min,5代表max,他们也可以分别是**-inf和inf**,当你不知道key中的score区间时,就可以使用这个。还有一个类似于SQL中的limit的可选参数,在此就不赘述。

除了能够对其中的元素添加权重之外,使用ZSet还可以实现延迟队列。

延迟队列用于存放延迟任务,那什么是延迟队列呢?

举个很简单的例子, 你在某个电商APP中下订单,但是没有付款,此时它会提醒你,「订单如果超过1个小时没有支付,将会自动关闭」;再比如在某个活动结束前1个小时给用户推送消息;再比如订单完成后多少天自动确认收货等等。

用人话解释一遍,那就是过会才要干的事情。

那ZSet怎么实现这个功能?

其实很简单,就是将任务的执行时间设置为ZSet中的元素权重,然后通过一个后台线程定时的从ZSet中查询出权重最小的元素,然后通过与当前时间戳判断,如果大于当前时间戳(也就是该执行了)就将其从ZSet中取出。

那,怎么取?

其实我看很多讲Redis实现延迟队列的博客都没有把这个怎么取讲清楚,到底该用什么命令,传什么参数。我们使用zrangebyscore命令来实现,还记得-inf和inf吗,其全称是infinity,分别表示无限小和无限大。

由于我们并不知道延迟队列当中的score(也就是任务执行时间)的范围,所以我们可以直接使用-inf和inf,完整命令如下。

(编辑:通化站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读