项目场景
实现一个商品秒杀的功能,能后台自定义秒杀时间段、商品库存等信息。
一、设计思路
这里简单分享下思路:
1.限流
秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增,由于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端。这里使用基于Redis简单粗暴的限流方案:信号量(Semaphore)
信号量就是可以被 多个线程同时持有 的 一种同步对象,比如我设置一个值为5的计数信号量,那么现在有十个线程来获取他就只会有五个可以成功,剩下那五个则获取失败。
所以说如果有个计数信号量定义的值是1,那么他其实就等同于 mutex (互斥锁)
2.具体流程
这里首先需要明确如何缓存秒杀的商品信息?
- 这里是根据秒杀活动状态来缓存秒杀的商品信息,上下架秒杀活动就会将商品信息缓存到Redis中。
- 秒杀成功使用消息队列发送订单信息,RabbitMQ监听器在接受到消息后,将订单信息写入数据库。
- 在秒杀时使用redisson对商品信息上锁,由于打算使用信号量,而信号量本质就是一种锁,所以不用再加锁。
二、数据库设计
1.秒杀活动表
存储秒杀活动信息seckill_info
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)