商家想要知道自己店铺卖的最好的 top 50 商品,如何实现这个功能?

Sherwin.Wei Lv7

商家想要知道自己店铺卖的最好的 top 50 商品,如何实现这个功能?

根据问题推断这个排行榜是一个动态的排行榜,店铺内商品一直在售卖,因此排行榜也会一直在变,所以如果利用数据库来排行计算效率会非常低,总不能每卖一单就利用数据库排序计算得到排行榜吧?

所以排除数据库这个方案。

应对数据库效率差的情况,我们常用的替代方案就是缓存,而 Redis 内有个 zset 可以实现排行榜的功能。

每个商家都对应有个 zset,score 存储商品售卖的数量,value 存储商品 ID。

每售卖一个商品,就可以利用 ZINCRBY 更新对应 score + 1,时间复杂度为 O(1)。

然后商家在查看 top 50 商品的时候,利用 zrevrange key 0 49 获取排行榜,底层存储用的是跳表,时间复杂度为 O(logN+M),N 为总元素数,M 为返回的元素数。

Comments
On this page
商家想要知道自己店铺卖的最好的 top 50 商品,如何实现这个功能?