关于商品抢购等并发场景下,可能会呈现超卖的景象,这时候就需求处理并发所带来的这些成绩了。
正在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并发解决的几种办法的具体内容,更多请存眷资源魔其它相干文章!
标签: php 方法 php开发教程 php开发资料 php开发自学 并发处理
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!