我正在尝试如何根据分数和日期计算职位/排名的策略我有一个两个数据与相同的分数显示在下面的图像。如果我运行命令$ZADD usersScores 11 userId6它会将其添加到userId 5上方,这不是我想要的内容是否可以根据日期将其添加到userId 1下面?
$ZADD usersScores 11 userId6
这是我的基本目标,我希望根据金额显示头寸,最早的头寸将通过日期显示在最上面
谢谢你!
c9qzyr3d1#
排序后的集合首先按得分排序,如果得分相等,则按成员的词法排序。因此,在你的例子中,如果你添加了以下键:
127.0.0.1:6379> ZADD myset 11 user1 (integer) 1 127.0.0.1:6379> ZADD myset 11 user5 (integer) 1 127.0.0.1:6379> ZADD myset 24 user3 (integer) 1 127.0.0.1:6379> zadd myset 54 user2 (integer) 1 127.0.0.1:6379> zadd myset 11 user6 (integer) 1
然后执行ZRANGE,您将得到按字母顺序排列的升序成员:
127.0.0.1:6379> zrange myset 0 -1 WITHSCORES 1) "user1" 2) "11" 3) "user5" 4) "11" 5) "user6" 6) "11" 7) "user3" 8) "24" 9) "user2" 10) "54"
它看起来像什么,是你的GUI正在使用,或者只是在引擎盖下传递rev参数给ZRANGE,它以相反的顺序排列所有内容(分数降序,字母顺序相反)
127.0.0.1:6379> ZRANGE myset 0 -1 WITHSCORES REV 1) "user2" 2) "54" 3) "user3" 4) "24" 5) "user6" 6) "11" 7) "user5" 8) "11" 9) "user1" 10) "11"
有几种方法可以处理第二次排序,方法是使用已排序的集合,让我们假设您希望使用32位unix时间戳来完成此操作1.您可以将第二个sortby字段添加到成员名称前面,这样,如果user 6的得分为1659579650,您只需将成员名称设置为1659579650:user1,然后在排序时,它将按照词法进行排序1.你可以把分数和第二个结合起来,因为11是分数,我们可以把11向左移32位,然后加上/或时间戳,结果是48,904,219,906,它们就会正确排序,然后当你想找到分数时,你所需要做的就是把分数右移32位。
1659579650
1659579650:user1
48,904,219,906
1条答案
按热度按时间c9qzyr3d1#
已排序的集合排序
排序后的集合首先按得分排序,如果得分相等,则按成员的词法排序。因此,在你的例子中,如果你添加了以下键:
然后执行ZRANGE,您将得到按字母顺序排列的升序成员:
它看起来像什么,是你的GUI正在使用,或者只是在引擎盖下传递rev参数给ZRANGE,它以相反的顺序排列所有内容(分数降序,字母顺序相反)
第二个排序依据
有几种方法可以处理第二次排序,方法是使用已排序的集合,让我们假设您希望使用32位unix时间戳来完成此操作
1.您可以将第二个sortby字段添加到成员名称前面,这样,如果user 6的得分为
1659579650
,您只需将成员名称设置为1659579650:user1
,然后在排序时,它将按照词法进行排序1.你可以把分数和第二个结合起来,因为11是分数,我们可以把11向左移32位,然后加上/或时间戳,结果是
48,904,219,906
,它们就会正确排序,然后当你想找到分数时,你所需要做的就是把分数右移32位。