Plusieurs méthodes d'implémentation pour résoudre les problèmes de concurrence dans le développement PHP :
Recommandé : serveur php
Option 1 : Utiliser un fichier lock verrou exclusif
La fonction flock est utilisée pour acquérir le verrou de fichier. Ce verrou ne peut être acquis que par un seul thread à la fois. Les autres threads qui n'ont pas acquis le verrou sont soit bloqués, soit l'acquisition échoue <.>
Lors de l'acquisition du verrou, interrogez d'abord l'inventaire. Si l'inventaire est supérieur à 0, passez une commande, réduisez l'inventaire, puis libérez le verrou Option 2 : Utilisez le verrou pessimiste fourni. par la base de données Mysql Le moteur de stockage Innodb prend en charge les verrous au niveau de la ligne Lorsqu'une ligne de données est verrouillée, les autres processus ne peuvent pas opérer sur la ligne de données Interrogez et verrouillez d'abord la ligne :select stock_num from table where id=1 for update if(stock_num > 0){ //下订单 update table set stock_num=stock-1 where id=1 }
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); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!