php redisによる排他ロックの利用方法

PHPでは、RedisのSETNXコマンドを用いて排他ロックを実現できます。SETNXコマンドは、指定したキーが存在しない場合にその値を設定し、キーが既に存在する場合は何もしません。

以下、Redisによる排他制御を使用したサンプルコードを示します。

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$lockKey = 'my_lock'; // 锁的key
$expireTime = 10; // 锁的过期时间,单位为秒

// 尝试获取锁
$lockAcquired = $redis->setnx($lockKey, time() + $expireTime);

if ($lockAcquired) {
    // 成功获取锁,执行需要加锁的操作

    // ...

    // 执行完毕后释放锁
    $redis->del($lockKey);
} else {
    // 未能获取锁,说明有其他进程正在执行需要加锁的操作
    // 可以选择等待一段时间后重新尝试获取锁,或者直接放弃
}

上記のコードでは、最初に setnx コマンドを使用してロックの取得を試みます。戻り値が 1 の場合、即ちロックの取得に成功した場合、ロックをかける必要がある操作を実行し、操作が完了したら del コマンドを使用してロックを解放します。戻り値が 0 の場合、即ち他のプロセスがロックを取得している場合は、一定時間待ってからロックの再取得を試行するか、または直接諦める選択肢があります。

bannerAds