陈炼人生
人生成长日记

一个PHP代码并发锁,使用PHP实现并发锁控制


class SyncLock
{

    /**
     * 自动加锁执行
     * @param $lock string 锁key
     * @param callable|array $func
     * @param array $params
     * @param int $waitTime 等待时间,微秒,默认相当于是100毫秒
     * @param int $maxExecuteTime 最大执行时间 秒
     * @return mixed
     * @throws Exception
     */
    public static function lockWait($lock, $func = [], $params = [], $waitTime = 100000, $maxExecuteTime = 120)
    {
        for ($i = 0; $i < 10; $i++) {
            if (Redis::setnx($lock, 1, $maxExecuteTime)) {
                try {
                    return call_user_func_array($func, $params);
                } catch (\Exception $e) {
                    throw $e;
                } finally {
                    Redis::delKey($lock);
                }
            }
            //等待时间随着循环次数增加
            $realWaitTime = $waitTime * $i ? $waitTime * $i : $waitTime;
            //等待,微秒
            usleep($realWaitTime);
        }
        throw new \Exception('并发处理异常');
    }
}

 

赞(0) 打赏

评论 抢沙发

人生重要课题之一就是自立自强:独立思考,经济独立,人格独立

人生探秘文章投稿

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏