# 《Seckill秒杀系统》第37章:秒杀活动监听缓存领域事件的设计与实现
作者:冰河
星球: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/13zrgLeHN (opens new window)
沉淀,成长,突破,帮助他人,成就自我。
- 本章难度:★★★☆☆
- 本章重点:介绍秒杀活动监听缓存领域事件的设计与实现,重点掌握在DDD领域架构模式下,采用Cola框架监听秒杀活动事件变更的方法,并能够灵活运用到自身实际项目中。
- 课程视频:https://t.zsxq.com/13zrgLeHN (opens new window)
大家好,我是冰河~~
像秒杀这种高并发、大流量的业务场景,在同一个方法中更新秒杀活动的数据库数据和缓存数据,可能会造成数据库数据和缓存数据不一致的问题。如果在更新秒杀活动的数据库数据后清除缓存数据,就有可能由于缓存中不存在数据,而导致大量线程直接打入数据库,致使数据库由于扛不住瞬时的高并发流量而宕机崩溃。
# 一、前言
对于秒杀活动数据的变更,在执行完操作数据库的业务后,对外发布一个事件,然后立即返回。由单独的领域服务监听对应的事件,接收到事件后,去更新秒杀活动对应的缓存数据,这种以发布领域事件的方式更新秒杀活动的缓存,既解耦了更新数据库数据和更新缓存数据的逻辑,又能够提高程序响应的性能,并且又提高了程序的可读性和可维护性,真是一举多得。
# 二、本章诉求
添加秒杀活动和更新秒杀活动状态时,在领域层对外发布一个缓存领域事件,由应用层监听对应的缓存领域事件,在监听到的事件中,更新对应的缓存数据。本章,就对监听秒杀活动缓存领域事件的逻辑进行设计和实现。
# 三、流程设计
本节,从监听缓存领域事件的流程和类结构两个方面来对监听缓存领域事件的流程进行简单的设计。
# 3.1 监听流程设计
在秒杀系统中,针对秒杀系统中缓存数据的变更,监听领域事件的流程如图37-1所示。
可以看到,领域层将事件封装成对应的事件模型发布到Cola,应用层会监听Cola中的事件,并且接收对应的事件,接收到事件后同步活动列表和活动详情的缓存。
# 3.2 类结构设计
在秒杀系统中,监听缓存领域事件涉及到的类结构如图37-2所示。
# 查看完整文章
加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码