我使用MongoDB连接,并且手头有Redis弹性缓存。有一个Mongo集合,它每周基本上会更改几次,并且其中包含一个totalPoints
我想对其中的一些甚至全部进行排序的集合,该集合具有大量记录。
因此,排序需要对DB进行大量工作,我真的不能假装在查询中对它们进行排序,因此我想拥有一个TOP列表。
我想获得一种方式来推送记录(srtings或对象),并将它们作为最大大小为n的存储桶排序。
您可以在此处使用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,以获取有关排序集的更多信息和命令。