PHP多进程并发同步
在公司做的一个红包系统中出现了并发同步问题,原本应该有唯一性的数据出现了重复,究其原因是因为PHP在判断用户的发放记录时出现了脏读,因此导致数据库的数据出问题,因为PHP没有进程锁的机制,所以参考网上资料使用PHP的文件锁,对并发进程进行锁定来强制同步。123456789<?php$fp = fopen("lock.txt", "w+");if(flock($fp,LOCK_EX)){ //..处理订单 flock($fp,LOCK_UN);} fclose($fp);
如果并发数多的情况下,并且数据不是很敏感可以考虑采用非阻塞文件锁进行同步12345678910111213<?php$fp = fopen("lock.txt", "w+");if(flock($fp,LOCK_EX | LOCK_NB)){ //..处理订单 flock($fp,LOCK_UN);}else{ echo "系统繁忙,请稍后再试";} fclose($fp);