我正在使用redis实现排行榜。我正在解决的问题陈述是-假设有一个用户,在排行榜上比他高5个用户,比他低5个用户。
以下是我采取的方法,如果它是最优的,或者可以做得更好,请让我知道:
1. lower_key = zrank('set_name', 'member_name') // get the position of the user in the set
2. higer_key = zcard('set_name') // the total no. of elements in the leaderboard
3. low = max
我试图在Redis中建立排行榜,并能够获得最高的X分数,并检索一个排名的用户Y。
Redis中的排序列表看起来很容易,除了一个问题-我需要分数不仅要按实际分数排序,还要按日期排序(所以谁先得到相同的分数,谁就会名列前茅)。SQL查询将为:
select * from scores order by score desc, date asc
在Redis中的排序集上运行zrevrange使用的内容如下:
select * from scores order by score desc, key desc
这将使用户在字典顺序上具有更大的键。
我能想到的一种解决方案是对排序集内的score字段进行