php+redis高并发秒杀方案(个人见解)
需求:
1:一个商品,库存只有100。
2:网站很出名,估计并发量为50W。
3:实现秒杀。
分析:
1:库存只有100,只能操作更新db库存 100次
2:访问量大,采用redis来做并发处理
3:设置库存量不能为负
思路:
1:后台设置一个功能,该功能把商品库存放到redis队列中,从右边放入。
@先判断redis队列是否已经存在库存,如果存在则提示库存已存在
@连接数据库得到库存
@循环放到redis缓存队列中
2:秒杀代码实现
@用户点击秒杀商品,则连接redis,查询队列是否存在库存,如果存在,就从队列左边弹出一个,
然后把该用户的id放到一个新的缓存队列中,然后判断该队列,如果存在绑定的用户则循环生成
订单并且更新库存。
@注意,如果生成订单或者更新库存出错,必须要做相应的处理。比如:如果订单生成失败,则重
新把用户放到缓存队列中(从右边进)。如果订单生成成功,库存更新失败,则把该用户id放到另
一个缓存队列中(该队列为是否更新库存成功),然后对该队列做判断,如果存在用户,则继续更
新减少库存。