# 《Seckill秒杀系统》第39章:秒杀商品监听缓存领域事件的设计与实现

作者:冰河
星球: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/13uVNuGJl (opens new window)

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

  • 本章难度:★★★☆☆
  • 本章重点:介绍秒杀商品监听缓存领域事件的设计与实现,重点掌握在DDD领域架构模式下,采用Cola框架监听秒杀商品事件变更的方法,并能够灵活运用到自身实际项目中。
  • 课程视频:https://t.zsxq.com/13uVNuGJl (opens new window)

大家好,我是冰河~~

在秒杀系统中,同一个方法中更新秒杀商品的数据库数据和缓存数据,可能会造成数据库数据和缓存数据不一致的问题。如果在更新秒杀商品的数据库数据后清除缓存数据,就有可能由于缓存中不存在数据,而导致大量请求直接打入数据库,致使数据库由于扛不住瞬时的高并发流量而宕机崩溃。

# 一、前言

向秒杀系统中保存秒杀商品和更新秒杀商品状态时,在执行完操作数据库的业务后,对外发布一个事件,然后立即返回。由单独的领域服务监听对应的事件,接收到事件后,去更新秒杀商品对应的缓存数据,这种以发布领域事件的方式更新秒杀商品的缓存,同样既解耦了更新数据库数据和更新缓存数据的逻辑,又能够提高程序响应的性能,并且又提高了程序的可读性和可维护性。

# 二、本章诉求

添加秒杀商品和更新秒杀商品状态时,在领域层对外发布一个缓存领域事件,由应用层监听对应的缓存领域事件,在监听到的事件中,更新对应的缓存数据。本章,就对监听秒杀商品缓存领域事件的逻辑进行设计和实现。

# 三、流程设计

本节,从监听缓存领域事件的流程和类结构两个方面来对监听缓存领域事件的流程进行简单的设计。

# 3.1 监听流程设计

在秒杀系统中,针对秒杀系统中商品缓存数据的变更,监听领域事件的流程如图39-1所示。


可以看到,领域层将事件封装成对应的事件模型发布到Cola,应用层会监听Cola中的事件,并且接收对应的事件,接收到事件后同步商品列表和商品详情的缓存。

# 3.2 类结构设计

在秒杀系统中,监听商品缓存领域事件涉及到的类结构如图39-2所示。

# 查看完整文章

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