如何应对PHP高并发秒杀场景?两种高效策略揭秘?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2329个文字,预计阅读时间需要10分钟。
如何解决PHP高并发(秒杀)问题?以下本篇章将分享两种解决方案(基于MySQL或基于Redis),希望对大家有所帮助。
秒杀会导致瞬间的高并发,使用数据库会增加数据量。
怎么解决PHP高并发(商品秒杀)问题?下面本篇文章就来给大家分享两种解决方案(基于mysql或基于Redis),希望对大家有所帮助。秒杀会产生一个瞬间的高并发,使用数据库会增加数据库的访问压力,也会降低访问速度,所以我们应该使用缓存,来降低数据库的访问压力;
可以看出这里的操作和原来的下单是不一样的:产生的秒杀预订单不会马上写入数据库,会先写入缓存,等用户支付成功时,修改状态,写入数据库。
假设num是存储在数据库中的字段,保存了被秒杀产品的剩余数量。
if($num > 0){ //用户抢购成功,记录用户信息 $num--; }
假设在一个并发量较高的场景,数据库中num的值为1时,可能同时会有多个进程读取到num为1,程序判断符合条件,抢购成功,num减一。
这样会导致商品超发的情况,本来只有10件可以抢购的商品,可能会有超过10个人抢到,此时num在抢购完成之后为负值。
解决该问题的方案由很多,可以简单分为基于mysql和redis的解决方案,redis的性能要由于mysql,因此可以承载更高的并发量,不过下面介绍的方案都是基于单台mysql和redis的,更高的并发量需要分布式的解决方案,本文没有涉及。
本文共计2329个文字,预计阅读时间需要10分钟。
如何解决PHP高并发(秒杀)问题?以下本篇章将分享两种解决方案(基于MySQL或基于Redis),希望对大家有所帮助。
秒杀会导致瞬间的高并发,使用数据库会增加数据量。
怎么解决PHP高并发(商品秒杀)问题?下面本篇文章就来给大家分享两种解决方案(基于mysql或基于Redis),希望对大家有所帮助。秒杀会产生一个瞬间的高并发,使用数据库会增加数据库的访问压力,也会降低访问速度,所以我们应该使用缓存,来降低数据库的访问压力;
可以看出这里的操作和原来的下单是不一样的:产生的秒杀预订单不会马上写入数据库,会先写入缓存,等用户支付成功时,修改状态,写入数据库。
假设num是存储在数据库中的字段,保存了被秒杀产品的剩余数量。
if($num > 0){ //用户抢购成功,记录用户信息 $num--; }
假设在一个并发量较高的场景,数据库中num的值为1时,可能同时会有多个进程读取到num为1,程序判断符合条件,抢购成功,num减一。
这样会导致商品超发的情况,本来只有10件可以抢购的商品,可能会有超过10个人抢到,此时num在抢购完成之后为负值。
解决该问题的方案由很多,可以简单分为基于mysql和redis的解决方案,redis的性能要由于mysql,因此可以承载更高的并发量,不过下面介绍的方案都是基于单台mysql和redis的,更高的并发量需要分布式的解决方案,本文没有涉及。

