从经典计算机到量子计算机,弱AI进阶到强AI时代?
与ZipList类似,IntSet也是使用的一连串的内存空间,但是不同的是ZipList可以存储二进制的内容,而IntSet只能存储整数;且ZipList存储是无序的,IntSet则是有序的,这样一来,元素个数相同的前提下,IntSet的查询效率会更高。 6. Sorted Set其与Set的功能大致类似,只不过在此基础上,可以给每一个元素赋予一个权重。你可以理解为Java的TreeSet。与List、Hash、Set一样,其底层的实现也有两种,分别是ZipList和SkipList(跳表)。 初始化Sorted Set的时候,会采用ZipList作为其实现,其实很好理解,这个时候元素的数量很少,采用ZipList进行紧凑的存储会更加的节省空间。当期达到如下的条件时,就会转换为SkipList:
6.1 使用 下面的命令中,key代表zset的名字;4代表score,也就是权重;而member就是zset中的key的名称。
除了能够对其中的元素添加权重之外,使用ZSet还可以实现延迟队列。 延迟队列用于存放延迟任务,那什么是延迟队列呢? 举个很简单的例子, 你在某个电商APP中下订单,但是没有付款,此时它会提醒你,「订单如果超过1个小时没有支付,将会自动关闭」;再比如在某个活动结束前1个小时给用户推送消息;再比如订单完成后多少天自动确认收货等等。 用人话解释一遍,那就是过会才要干的事情。 那ZSet怎么实现这个功能? 其实很简单,就是将任务的执行时间设置为ZSet中的元素权重,然后通过一个后台线程定时的从ZSet中查询出权重最小的元素,然后通过与当前时间戳判断,如果大于当前时间戳(也就是该执行了)就将其从ZSet中取出。 那,怎么取? 其实我看很多讲Redis实现延迟队列的博客都没有把这个怎么取讲清楚,到底该用什么命令,传什么参数。我们使用zrangebyscore命令来实现,还记得-inf和inf吗,其全称是infinity,分别表示无限小和无限大。
由于我们并不知道延迟队列当中的score(也就是任务执行时间)的范围,所以我们可以直接使用-inf和inf,完整命令如下。 (编辑:通化站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |