整理一些思路
- PHP7, yii2加Redis怎么实现秒杀
- 一个list列表存放秒杀的商品
- 一个list列表存放秒杀的客户信息
首先读取秒杀商品到商品列表, 然后等待客户秒杀.
-
- 每次客户请求,
- 检查用户列表与商品数量是否大于等于. 如果是就提示已经抢完.下次再来. (这里可以选择方案 是用户下单就减少还是付款再减少)
- 检查商品的剩余数量是否大于0, 是就减一,并加入客户到列表里面. 否就提示已经抢完.下次再来. (这里可以选择方案 是用户下单就减少还是付款再减少)
- 每次客户请求, 加入客户到列表里面. 等待付款. 付款时检查??检查商品的剩余数量是否大于0, 是就减一,否就提示已经抢完.下次再来.
- (上面的集中方法也是有问题, 如果高并发 还是会有可能同时读取和写入的冲突情况, 可以考虑加锁, 加事务, 特别是更新数量进行减一的时候要带着上次查询出来的库存数量, 但是不加锁的话也可能高并发时同时请求操作.)
- 还有一种方案, 是直接在数据库用数据版本, 加一个version字段, 每次写入时作为条件. 如果版本不对, 可以用while控制重新操作几次请求, 也可以让用户再次提交.
- 每次客户请求,
原文地址:https://www.cnblogs.com/stillstep/p/11056479.html
时间: 2024-10-05 21:04:58