前言
zset是根据score进行排序,当score相同时,默认按照member的字典序进行排序。案例说明:
127.0.0.1:6379> zadd t1 2 c 1 b 2 a
(integer) 3
127.0.0.1:6379> zrevrange t1 0 -1
1) "c"
2) "a"
3) "b"
在Redis的有序集合中,元素的排列顺序是根据它们对应的score值来排序的。在这个例子中,我们向t1有序集合中添加了三个元素:a、b和c。其中,a和c的score值都是2,而b的score值是1。因为所有元素的score值都不同,所以它们会按照score值从小到大的顺序排序。
由于a和c的score值相同,因此,它们的排列顺序需要使用字典序来比较。在这里,字典序遵循的是ASCII码表的顺序,即A~Z的ASCII码值依次升序排列,因此c在a的前面。
需求:当score一样时,怎么按时间排序,即最新的排在前面
关键:只要重新设计score组成即可,将时间戳放入小数部分即可。也就是:score.timeStamp
对上述案例重新设计:
127.0.0.1:6379> clear
127.0.0.1:6379> zadd t1 2.1681804874177 c 1.1681804874331 b 2.1681804894121 a
(integer) 3
127.0.0.1:6379> zrevrange t1 0 -1
1) "a"
2) "c"
3) "b"
需求完成。
在代码层面只要获取下系统当前的时间戳拼接一下即可。