我可以为redis zset定义自定义比较功能吗?

时间:2019-05-25 07:14:59

标签: redis

背景:
我现在使用php + redis作为后端来存储等级。 zset似乎是解决此问题的好方法。 但是,排名包含多个分数,如果第一个分数相等,则需要比较第二个分数来确定排序。总共有3分。

我认为将会有一个接口,我可以为特定的zset设置自定义比较功能,以便我可以在其中执行排序工作,但是我找不到它。此外,我希望对排名进行排序。如果我每次需要重新排序时都需要再次排序,那么我认为这很浪费。

预期结果:

zadd myset 1000_100_3000 matchId1
zadd myset 1000_2500_250 matchId2
zadd myset 1000_2500_200 matchId3

zrange myset 0 -1返回:

matchId2
matchId3
matchId1

类似的东西

1 个答案:

答案 0 :(得分:1)

简短的回答:不,你不能这样做

但是,您通常可以以使它们可排序的方式来组合多个键。在您的情况下,一个显而易见的选择是确定三个片段的最大范围,然后将它们全部组合成一个大数字。例如,1000_100_3000可能是数字100001003000(每块4个十进制数字),可以对其进行比较或分解。不过,您可能还想考虑位而不是数字。例如,也许允许每段20位,并使用移位/掩码位操作来组成/分解(即@Override public void onDestry() { super.onDestroy(); Utilities.getInstance().setDataList(null); }