我在使用Redis的有序集合实现了一个领导委员会。 我希望用户使用同一分数按时间顺序进行排序,即谁是先用户应该排名更高。 目前Redis的支持字典顺序。 有没有一种方法来覆盖。 手机号码被用作有序集合成员。
一个解决方案,我认为是在附加的手机号码的前时间戳和维护一个哈希地图手机号和时间戳。
$redis.hset('mobile_time', '1234567890', "#{Time.now.strftime('%y%m%d%H%M%S')}")
pref = $redis.hget('mobile_time, '1234567890'')
$redis.zadd('myleaderboard', "1234567890:#{pref}")
这样我可以通过哈希添加前缀获得在任何情况下给定的用户级别。
现在这不是我想要的东西。 这将返回我想要的对面。 用户谁早来将放在下面的用户谁后(两者以同样的比分)谈到。
Key for user1 = 201210121953**23**01234567890 score: 400
key for user2 = 201210121253**26**09313123523 score: 400 (3 seconds later)
如果我使用zrevrangebyscore,用户2将被置于比USER1高。
然而,有一种方式来获得所需的排名:
users_with_higher_score_count = $redis.zcount("mysset", "(400", "+inf")
users_with_same_score = $redis.zrangebyscore("mysset", "400", "400")
现在我有一个正确排序列表users_with_same_score。 看着指数我可以计算用户的排名。
要获得领先榜。 我可以得到成员的50间隔,并通过Ruby代码进行订购。 不过,这并不似乎是一个好办法。
我想知道是否有更好的方法来做到这一点。 或者说,可以在溶液中进行的任何改进我旨意。
在此先感谢您的帮助。
PS 分数是50的倍数