有没有办法让Redis保持前N名?

die*_*lar 3 redis

我使用MongoDB连接,并且手头有Redis弹性缓存。有一个Mongo集合,它每周基本上会更改几次,并且其中包含一个totalPoints我想对其中的一些甚至全部进行排序的集合,该集合具有大量记录。

因此,排序需要对DB进行大量工作,我真的不能假装在查询中对它们进行排序,因此我想拥有一个TOP列表。

我想获得一种方式来推送记录(srtings或对象),并将它们作为最大大小为n的存储桶排序。

gla*_*tor 5

您可以在此处使用anitrez描述的模式:http ://oldblog.antirez.com/post/take-advantage-of-redis-adding-it-to-your-stack.html

基本上只使用排序集,然后将得分为totalPoints的集合值相加。

zadd toplist totalPoints <collectionItemIdentifier>
Run Code Online (Sandbox Code Playgroud)

然后获取前100名作为

ZREVRANGE toplist 0 99
Run Code Online (Sandbox Code Playgroud)

您可以通过定期使用ZREMRANGEBYSCORE和删除分数在一定范围内的元素来控制大小(不需要)。

检查http://redis.io/commands#sorted_set,以获取有关排序集的更多信息和命令。