# seckill
基于SpringBoot+Reds+RabbitMQ实现的分布式秒杀系统
#### 整体流程
前端页面采用隐藏秒杀地址和使用随机秒杀地址来防止用户恶意刷接口,点击秒杀时会让用户输入数字计算验证码,输入正确后进入后端业务逻辑。
后端业务逻辑分为生产者和消费者。
**生产者**
1. 生产者**首先进行预加载**,查询所有的商品列表,把每一个商品根据商品ID 和 库存容量 加入到redis 中,其次做一个内存标记,使用hashMap,将每一个商品id 都标记为 false。
2. 使用令牌桶算法对其进行限流
3. 判断刚刚随机生成的路径是否正确,然后在判断该商品是否已经卖出根据内存标记,如果都满足那么在redis中预减库存(因为初始化时,每一个商品Id和库存都存入redis中)
4. 判断库存是否小于 0 ,如果不小于0说明减库存成功,
5. 接着判断是否秒杀成功,从redis 中根据用户id 和商品id查询,如果存在说明该用户已经秒杀,不能重复秒杀
6. 加入MQ,将用户id 和商品ID封装成对象序列化成JSON 字符串。
**消费者**
1. 从队列中数据,将JSON字符串转换为对象,取出用户ID 和商品Id
2. 从数据库中判断库存是否 <= 0,如果小于 0 说明库存为0直接返回。
3. 从缓存中查看该订单是否秒杀到,如果秒杀到直接返回。没有秒杀到在缓存中写入该秒杀订单
4. 执行秒杀事务,先判断减库存是否成功,如果成功写入秒杀订单。
#### 商品超卖问题
在商品表中添加一个版本号字段,减库存业务时,通过商品id获取商品的版本号,在减库存操作时,先判断查询的verison 是否一致,一致则减库存成功。写入秒杀订单。
```
update set seckill_goods stock = stock - 1, version = version + 1
where id = #{goodsId} and stock > 0 and version = #{version}
```
####
没有合适的资源?快使用搜索试试~ 我知道了~
基于SpringBoot+Reds+RabbitMQ实现的分布式秒杀系统seckill.zip
共277个文件
xml:80个
java:68个
class:38个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 141 浏览量
2024-05-14
13:52:14
上传
评论
收藏 1.36MB ZIP 举报
温馨提示
该项目利用了基于springboot + vue + mysql的开发模式框架实现的课设系统,包括了项目的源码资源、sql文件、相关指引文档等等。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot+Reds+RabbitMQ实现的分布式秒杀系统seckill.zip (277个子文件)
SecKillController.class 8KB
GoodsController.class 7KB
UserServiceImpl.class 6KB
SecKillServiceImpl.class 5KB
RedisServiceImpl.class 5KB
GoodsServiceImpl.class 4KB
OrderServiceImpl.class 4KB
UserController.class 3KB
CodeMsg.class 3KB
SkUser.class 3KB
SkOrderInfo.class 3KB
Result.class 2KB
GlobalExceptionHandler.class 2KB
OrderMapper.class 2KB
JsonUtils.class 2KB
GoodsVo.class 2KB
SkGoods.class 2KB
SkGoodsSeckill.class 2KB
RedisConfig.class 2KB
UserArgumentResolver.class 2KB
WebConfig.class 2KB
DBUtil.class 2KB
IsMobileValidator.class 2KB
GoodsMapper.class 2KB
SkOrder.class 1KB
Md5Utils.class 1KB
LoginVo.class 1KB
UserMapper.class 979B
ValidatorUtil.class 979B
IRedisService.class 967B
IsMobile.class 933B
GlobalException.class 729B
ISecKillService.class 705B
MainApplication.class 704B
IGoodsService.class 651B
UUIDUtil.class 586B
IUserService.class 519B
IOrderService.class 484B
bootstrap.css 143KB
bootstrap.css 143KB
bootstrap.min.css 118KB
bootstrap.min.css 118KB
bootstrap-theme.css 26KB
bootstrap-theme.css 26KB
bootstrap-theme.min.css 23KB
bootstrap-theme.min.css 23KB
layer.css 14KB
layer.css 14KB
layer.css 5KB
layer.css 5KB
glyphicons-halflings-regular.eot 20KB
glyphicons-halflings-regular.eot 20KB
loading-0.gif 6KB
loading-0.gif 6KB
loading-2.gif 2KB
loading-2.gif 2KB
loading-1.gif 701B
loading-1.gif 701B
.gitignore 117B
goods_detail.htm 10KB
order_detail.htm 4KB
goods_detail.html 3KB
goods_detail.html 3KB
login.html 3KB
login.html 3KB
regist.html 3KB
regist.html 3KB
order_detail.html 2KB
order_detail.html 2KB
goods_list.html 2KB
goods_list.html 2KB
secKill_fail.html 246B
secKill_fail.html 246B
seckill.iml 8KB
SecKillController.java 6KB
UserServiceImpl.java 6KB
GoodsController.java 5KB
SecKillServiceImpl.java 4KB
AccessInterceptor.java 4KB
LoginInterceptor.java 4KB
RedisServiceImpl.java 4KB
GoodsServiceImpl.java 4KB
UserUtil.java 3KB
OrderServiceImpl.java 3KB
MqConfig.java 3KB
MqReceiverServiceImpl.java 3KB
VerifyUtils.java 2KB
MqSenderServiceImpl.java 2KB
CodeMsg.java 2KB
OrderController.java 2KB
SkOrderInfo.java 2KB
SkUser.java 2KB
UserController.java 2KB
OrderMapper.java 2KB
GoodsMapper.java 1KB
SkGoods.java 1KB
JsonUtils.java 1KB
GlobalExceptionHandler.java 1KB
SkGoodsSeckill.java 1KB
RedisConfig.java 1KB
共 277 条
- 1
- 2
- 3
资源评论
枫蜜柚子茶
- 粉丝: 8973
- 资源: 5351
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功