使用redis中setnx防止併發二次寫入

407593529發表於2021-06-21
/**
     * 使用redis中setnx防止併發二次寫入
     * @return bool
     */
    public function lock()
    {
        $uid = '110';

        $lock_key = 'lock_' . $uid;
        $is_lock  = Redis::setnx($lock_key, 1); // 加鎖
        if ($is_lock) { // 獲取鎖許可權
            // 程式邏輯處理:
            DB::table('test')->insert(['user_name' => '1234']);
            // 釋放鎖
            Redis::del($lock_key);
        } else {
            // 防止死鎖
            if (Redis::ttl($lock_key) == -1) {
                Redis::expire($lock_key, 5);
            }
            return true; // 獲取不到鎖許可權,直接返回
        }

    }
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章