02-针对商品排行榜,你是怎么实现的
背景描述
当时产品提出了每日热销排行榜在零点进行变更的需求。在我接到这个需求后,我立即想到了使用Redis的有序集合(ZSET)来实现这个功能,并与我们的技术负责人进行了沟通。
经过与技术负责人的讨论和确认,我们一致认为使用有序集合是一个可行的解决方案。因此,我进行了技术评审,并得到了批准开始实施该方案。
在实现过程中,我使用了Redis的有序集合数据结构来存储和排序商品销量信息。具体而言,我将日期作为有序集合的key,商品ID作为成员(member),销售数量作为分值(score)。每当有订单数据更新时,我通过调用ZINCRBY
命令来增加对应商品的销售数量。这样,在每天零点之前,所有的订单数据会被累积到有序集合中。
至于定时更新排行榜数据的功能,我采用了Spring Boot提供的定时任务注解(@Scheduled
)来指定每天零点执行更新操作。在定时任务中,我首先删除前一天的排行榜数据,然后根据最新的订单数据重新生成排行榜。
代码实现
// 记录订单数据
public void recordOrderData(String date, String productId, int quantity) {
// 更新有序集合中对应商品的销售数量
redisTemplate.opsForZSet().incrementScore("daily_ranking_" + date, productId, quantity)