下面我来用redis模拟形成排行榜数据。
redis默认有16个数据库,采用select N命令,即可切换到对应的数据库。针对排行榜等销售分析类数据可单独存储到一个库中。
我们通常通过redis来存储热数据。比如图书排行榜,上周热销榜等等,为用户提供参考。比如要作日排行榜,使用命令:
zincyby rank:book:20150326 1 thinkpad400
设置该key过期时间,到期后自动清除,防止过多占用,此为当天的排行榜。在下单成功后向此key中写入增量数据
ZRANGE rank:book:20150326 0 -1 withscores
升序排列排行榜数据,往往我们需要倒序排列,如:
ZREVRANGE rank:book:20150326 0 9 withscores
利用并集实现多天的积分总和,实现“周排行榜”:
zunionstore rank:book:201565wk 7 rang:book:20150326 rang:book:20150327 ...
那么查询上周排行榜 Top10 的信息就是:
ZREVRANGE rank:book:201565wk 0 9 withscores
设置一定的有效期,以此类推开成月排行榜,季排行榜, 年度排行榜。以及同品类排行榜,全站销售排行榜等等,都是基于此类数据的合并、排序。若有数据分析的需要,同样可以把热数据持久化,比如写入Mysql中,便于数据挖掘。
Sorted Sets集合大概可容纳(2的32次方-1)个元素,所在容量上不用考虑太多。