我正在使用Lumen制作一个小型应用程序,该应用程序的运行成本很高。我想确保一次只有一个人可以打这条路线。如果第二个人尝试在另一个人正在运行时撞上该路线,则应用程序应返回一条消息,提示“请在几分钟后重试”。我该怎么做?
答案 0 :(得分:2)
使用互斥锁。如果您的应用程序在具有本地文件系统的单个主机上运行,则可以使用flock:
public function my_controller() {
$fp = fopen('lockfile', 'r');
if (! flock($fp)) die('Try again later');
// do expensive thing...
funlock($fp);
fclose($fp);
}
如果您有计算机集群,或者计算机的磁盘安装在网络上,请使用数据库互斥锁。例如,在mysql中:
do get_lock('lock');