# 《Seckill秒杀系统》第35章:商品详情混合型缓存设计与实现

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
课程视频:https://t.zsxq.com/13YNXZNic (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★★☆☆
  • 本章重点:秒杀商品详情实现混合型缓存设计与开发,掌握高并发场景下的缓存实现方案,重点了解并掌握如何有效避免缓存击穿、缓存穿透和缓存雪崩的方案。
  • 课程视频:https://t.zsxq.com/13YNXZNic (opens new window)

大家好,我是冰河~~

用户在参与秒杀活动时,进入秒杀活动详情后,就会看到参与当前秒杀活动的商品列表,选择自己心仪的商品,进入商详页页进行抢购,在秒杀活动开始前,会有大量用户进入对应的秒杀活动来查看商品列表,选择自己心仪的商品,进入商详页。在秒杀开始前的瞬间或者在秒杀过程中,大量用户会不断刷新商详页来查看商品状态、商品库存和抢购状态。

# 一、前言

秒杀活动开始前,会有大量用户进入对应的秒杀活动详情,查看参与秒杀活动的商品列表,选择自己心仪的商品,点击进入商品详情页,此时不仅会对秒杀活动详情接口产生较大的流量压力,也会对获取秒杀商品列表接口和秒杀商品详情接口,产生较大的压力。并且在秒杀开始前的瞬间或者在秒杀过程中,大量用户会不断刷新商详页来查看商品状态、商品库存和抢购状态。

可以这么说,秒杀商品详情接口的访问压力,会比秒杀活动列表接口、秒杀活动详情接口和秒杀商品列表的接口都要大,所以,为了系统的稳定性,同样需要对秒杀商品详情接口进行精心的缓存设计。

# 二、本章诉求

对秒杀商品详情接口进行本地缓存+分布式缓存的混合型缓存设计与实现,在访问秒杀商品详情接口时,优先从本地缓存获取数据,如果本地缓存不存在具体的业务数据,则从分布式缓存中获取数据,并且同一时刻只能有一个线程更新本地缓存数据。如果从分布式缓存获取数据时,分布式缓存中不存在具体的业务数据,则此时同一时刻只能有一个线程访问数据库,查询到业务数据后,将数据更新到缓存中。其他没有获取到访问数据库机会的线程,快速返回,不占用系统资源。

# 三、混合型缓存设计

实现秒杀商品详情的混合型缓存时,同样需要重点考虑并避免缓存击穿、穿透和雪崩的问题,因此,在秒杀商品详情接口的混合型缓存的设计上,同样需要对混合型缓存的执行流程进行精心的设计。本节,就对秒杀商品详情混合型缓存的流程设计和和类结构设计进行简单的介绍。

# 3.1 流程设计

关于商品详情混合型缓存的执行流程如图35-1所示。


整体流程如下所示。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码