PHP通过文件锁实现进程锁

  1. PHP通过文件锁实现进程锁

    <?php
    //文件锁优点:实现简单,容易维护
    //文件锁缺点:仅限单机,无法部署为分布式锁
    $argument1 = "argument1";
    $argument2 = "argument2";
    
    $lock_dir = sys_get_temp_dir() . "/locks/";
    if (!is_dir($lock_dir)) {
        if (!mkdir($lock_dir, 0755, true)) {
            exit("无法建锁,目录权限" . $lock_dir . PHP_EOL);
        }
    }
    
    $lock_uniq = md5(json_encode([$this->getName(), $argument1, $argument2]));
    $lock_file = "{$lock_dir}{$lock_uniq}";
    if (!is_file($lock_file)) {
        if (@file_put_contents($lock_file, null) === false) {
            exit("无法建锁,文件权限" . $lock_file . PHP_EOL);
        }
    }
    
    $lock_ress = fopen($lock_file, "r+");
    if (!flock($lock_ress, LOCK_EX | LOCK_NB)) {
        //LOCK_NB 的作用是不阻塞,在windows下是无效的
        exit("已经运行,无需运行" . $lock_file . PHP_EOL);
    }
    
    /**
     * 其它业务代码↓↓↓↓↓↓
     */
    for ($i = 1; $i <= 20; $i++) {
        sleep(1);
        echo $i . PHP_EOL;
    }
    /**
     * 其它业务代码↑↑↑↑↑↑
     */
    
    fclose($lock_ress);
    unlink($lock_file);
    
Copyright © 豆包嘿嘿~ 2012-∞ 冀ICP备17033181号 all right reserved,powered by Gitbook修订: 21-07-13 15:18

results matching ""

    No results matching ""