实现功能: 1. 基于redis队列,防止高并发的超卖 2. 基于mysql的事务加排它锁,防止高并发的超卖
基于redis队列工作流程: 1. 管理员根据goods表中的库存,创建redis商品库存队列 2. 客户端访问秒杀API 3. web服务器先从redis的商品库存队列中查询剩余库存重点内容 4. redis队列中有剩余,则在mysql中创建订单,去库存,抢购成功 5. redis队列中没有剩余,则提示库存不足,抢购失败重点内容
基于mysql事务和排它锁工作流程: 1:开启事务 2:查询库存,并显示的设置写锁(排他锁):SELECT * FROM goods WHERE id = 1 FOR UPDATE 3:生成订单 4:去库存,隐示的设置写锁(排他锁):UPDATE goods SET counts = counts – 1 WHERE id = 1 5:commit,释放锁 注意:第二步步可以设置共享锁,不然有可能会造成死锁。
![](https://i-blog.csdnimg.cn/blog_migrate/8c0383d4240820573615d7b90848a7c0.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/35c456605afae9dcf6c0cdb41c181053.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/61f7500c1bf63784e61e70a61456564d.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/0c1404cee9801c9f2a3788d420c83087.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/5cab9023deb6804eb055e22452b4bdce.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/ad38c876b5feb89048b436f3c351f544.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/96b8dc652ec9009ca2991bc8b300e4bb.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/b5e93bc32ad03b17ce07857b8c7c1e2a.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/1573d9d7b4a9839657654f81be51094d.jpeg)