php并发处置的几种办法
发布时间:09/01 来源:未知 浏览:
关键词:
关于商品抢购等并发场景下,大概会显现超卖的现象,这时就需要解决并发所带来的这些问题了。
在PHP说话中并没有原生的供给并发的解决方案,因此就需要借助其他方式来实现并发操纵。
方案一:使用文件锁排它锁
flock函数用于猎取文件的锁,这个锁同时只能被一个线程猎取到,其它没有猎取到锁的线程要末堵塞,要末猎取失败。在猎取到锁的时候,先查询库存,假如库存大于0,则停止下订单操纵,减库存,然后开释锁。
方案二:使用MySQL数据库供给的悲不雅锁
Innodb储备引擎支撑行级锁,当某行数据被锁按时,其他进程不克不及对这行数据停止操纵。
先查询并锁定行:
select stock_num from table where id=1 for update
if(stock_num > 0){ //下订单 update table set stock_num=stock-1 where id=1 }
方案三:使用队列
将会员的下单恳求顺次存入一个队列中,后台用一个独自的进程处置队列中的下单恳求。
方案四:使用Redis
redis的操纵都是原子性的,可以将商品的库存存入redis中,下单此前对库存停止decr操纵,假如返回的值大于等于0等可以下单,不然不克不及下单,这种方式效力较高。
if(redis->get('stock_num') > 0){ stock_num = redis->decr('stock_num') if(stock_num >= 0){ //下订单 }else{ //库存不足 } }else{ //库存不足 }
引荐教程:PHP视频教程
以上就是php并发处置的几种办法的具体内容,更多请关注百分百源码网其它相关文章!