•   欢迎来到21NN网.
  •   请记住本站网址www.21nn.cn

php并发要领有哪些【php问题】,php,并发

摘要: PHP开辟中处置惩罚并发题目的几种完成要领:引荐:php服务器计划一:运用文件锁排它锁flock函数用于猎取文件的锁,这个锁同时只能被一个线程猎取到,别的没有猎取到锁的线程要么壅塞...

PHP开辟中处置惩罚并发题目的几种完成要领:

引荐: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{
//库存不足
}

其他并发题目:

在实际运用中,许多情况下会把数据存入缓存,当缓存失效时,去数据库取数据并重新设置缓存,假如这时候并发量很大,会有许多历程同时去数据库取数据,致使许多要求

穿透到数据库,而使数据库奔溃,这里可用文件锁来处置惩罚

$data = $cache->get('key');
if(!$data){
  $fp = fopen('lockfile');
  if(flock($fp, LOCK_EX)){
    $data = $cache->get('key');//拿到锁后再次搜检缓存,这时候能够已经有了
    if(!$data){
      $data = mysql->query();
      $cache->set('key', $data);
    }
    flock($fp, LOCK_UN);
  }
  fclose($fp);
}

以上就是php并发要领有哪些的细致内容,更多请关注ki4网别的相干文章!

分享到:

发表评论

评论列表

还没有评论,快来说点什么吧~

公众号二维码

微信公众号