关于几百万用户量下redis排行榜设计

1.想做一个用户金币排行榜,显示的话就只显示最高的100条记录
2.谈到用redis做排行榜多数会想到用sorted set来做。但是假如有几百万用户,并且日活几十万的情况下,把所有数据都放在redis上的话就有点多了。
3.合理做法是不是应该先用数据库把用户的信息存起来,更新操作都在数据库上,然后定时从数据库里譬如取100条数据出来放在sorted zet让用户读取比较合理?这样内存消耗和redis服务器写操作就比较低
4.另外一方面,如何考量数据量是否太大或者IO操作太频繁,而不适合放到redis上呢?

阅读 5.5k
1 个回答

因为你只需要显示前100名,所以用一个最小堆就可以了。

Redi可以用sorted set加一个key保存第100名的积分,数据库更新用户积分后,先判断是否比当前第100名高,如果是就更新key和插入/更新到sorted set,然后定期把100名以后的移除掉,这样就不会占太多内存。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题