请教一个redis SortedSet 排序问题
发布于 7 年前 作者 im-here 4546 次浏览 来自 问答

最近在用redis的SortedSet做积分排行榜,降序排列。SortedSet默认同样的积分后达到的排名靠前(降序) 即假如我现在有个key为rank的里面有如下member:

m1:10
m2:20

按降序排的话应该是:m2>m1 假如这时候又来了m3,积分也是20分,按照SortedSet的排序应该是:m3>m2>m1 但我们很多时候需求是 同样的积分谁先达到谁排名靠前,即想要的结果应该是:m2>m3>m1

各位有这样的需求吗?都是怎么处理的呢?

7 回复

把分值做成小数 同一分值的可以区分开

@leiwei1991 什么意思?小数也是一样的怎么处理呢? 20.00 和20.00排名还是和20和20一样啊

想办法区别两个20, 第一个进去的可以是20.99 第二个是20.98之类。。取出的分数得处理成整数。@

@leiwei1991 这倒是一个方法,不过这还得处理先集合里是否存在20.98或20.99

你需要添加一个排序字段,自定义的排序规则,简单的你可以用字符串拼接,积分加上时间,在转成number。 按照你这个排序规则的话,比如你这个是个活动,你可以用活动结束的时间减去当前时间,用积分拼接加上它。(数大的肯定是比数小的先提交的) 201412345678911 201412345677911 类似这样,20是积分。

考虑记录下最近更新积分的时间,在应用里面排序吧。

@yanfch 谢谢,好像这个方法最好

回到顶部