Рубрики
Uncategorized

Redis Реализует Блокировки

Автор оригинала: David Wong.

Представил

Потребности не будут вдаваться в подробности, предположительно, вы столкнулись с необходимостью использовать сценарии блокировки данных. Посмотрите на некоторую информацию и другой код, измените запись.

SETNX

Основной принцип заключается в использовании команды Redis SETNX.

возьмите ключ Установите значение в значение Если и только если ключ Не существует.

Если дано ключ Если он уже существует, SETNX ничего не делает.

SET NX-это сокращение от “УСТАНОВИТЬ, если он не существует” (УСТАНОВИТЬ, если он не существует).

Возвращаемое значение:

Настройка выполнена успешно, возврат 1

Сбой настройки, возврат 0

Когда установка завершается неудачно, это указывает на то, что блокировка используется. В течение определенного периода времени цикл запрашивает, пока текущая блокировка не будет снята, а затем блокировка будет получена.

Пример

php
Include'redis.php'; // The method of connecting Redis in the previous article

$redis = getRedis();

function redisLock()
{
    $redis = getRedis();
    $redisKey = 'redisKey';
    $redisValue = time();

    for ($i = 0; $i < 150; $i++) {

        $flag = $redis->setnx($redisKey, $redisValue);
        if (!$flag) {
            // Acquisition lock failed
            usleep(200000);
            continue;
        }

        // Operate here and release the lock after the operation is completed.
        $redis->del($redisKey);
        return true;
    }

    // Deadlock prevention, more than 5 minutes deletion
    if (time() - $redis->get($redisKey) > (60 * 5)) {
        $redis->del($redisKey);
    }
    return false;
}

Ссылка: SETNX.