在秒杀,抢购等并发场景下,可能会出现超卖的现象,在 php 语言中并没有原生提供并发的解决方案,因此就需要借助其他方式来实现并发控制,其实方案有很多种,今天只是举个栗子抛砖引玉,有其他更好的方案你可以自己去玩一玩就好了。
列出常见的3个解决方案有:
使用队列,额外起一个进程处理队列,并发请求都放到队列中,由额外进程串行处理,开卷未必有益并发问题就不存在了,但是要额外进程支持以及处理延迟严重,本文不先不讨论这种方法。
利用数据库事务特征,做原子更新,此方法需要依赖数据库的事务特性。
借助文件排他锁,在处理下单请求的时候,用 flock 锁定一个文件,成功拿到锁的才能处理订单。
redis 事务是原子操作,可以保证订单处理的过程中数据没有被其它并发的进程修改。
示例代码:
使用 ab 测试
阻塞模式下,如果进程在养老手册获取文件排他锁时,其它进程正在占用锁的话,此进程会挂起高中政治知识点等待其它进程释放锁后,并自己获取到锁后,再往下执行。
示例代码:
使用 ab 测试
非阻塞模式下,如果进程在获取文件排他锁时,其它进程正在占用锁的话,此进程会马上判断获取锁失败,并且继续往下执行。\
示例代码:
使用 ab 测试
最后给出三种处理方式的测试结果比较
redis 事务方式:
文件排他锁(阻塞模式):
文件排他锁(非阻塞模式):
经测试结果对比,redis 事务方式优于文件排他锁方式,而文件排他锁方式中,非阻塞模式优于阻塞模式。
到此这篇关于php并发场景的三种解决方案代码实例的文考核鉴定意见章就介绍到这了,更多相关php并发场景的三种解决方案内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望演讲台词大家以后多多支持www.887551.com!
本文发布于:2023-04-09 02:17:46,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8f51a64114cb0f85927f6d17d40a6b16.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP并发场景的三种解决方案代码实例.doc
本文 PDF 下载地址:PHP并发场景的三种解决方案代码实例.pdf
留言与评论(共有 0 条评论) |