Redis使用Zset做一个排行榜,当权值一样时,怎么按时间排序

文章介绍了如何利用Redis的ZSet数据结构,通过结合score和时间戳来实现元素的排序。当score相同时,通过在score的小数部分添加时间戳,可以确保即使score相同,也能根据时间的先后顺序进行排序。例如,文章展示了如何重新设计score,使得最新的元素排在前面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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"

需求完成。
在代码层面只要获取下系统当前的时间戳拼接一下即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值