Transactions
https://redis.io/docs/manual/transactions/

Как же работают транзакции в Redis
https://habr.com/ru/post/165223/

 
 Блокировки
Оптимистичная блокировка

В рамках сессии позволяет установить наблюдение за значением по ключу. Если значение будет изменено, то redis оповестит об этом и позволит откатить операцию, либо выполнить заново.

Как работает Redis при одновременном доступе нескольких клиентов?
https://ru.stackoverflow.com/questions/876405/Как-работает-redis-при-одновременном-доступе-нескольких-клиентов

Пессимистичная блокировка

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

Distributed Locks with Redis
https://redis.io/docs/reference/patterns/distributed-locks/

Распределенные блокировки с применением Redis
https://habr.com/ru/company/piter/blog/518218/

Шаблон транзакции -  оптимистичной блокировки.

Команда MULTI обозначает, что все команды, идущие после и выполняющие изменение данных, будут накапливаться и будут выполнены при вызове команды EXEC.
При этом команды чтения данных не попадают в транзакцию а выполняются сразу же.

// Устанавливаем наблюдение за ключом
WATCH mykey

// Считываем значение в переменную и обновляем ее
val = GET mykey
val = val + 1

// Запускаем обновляющую транзакцию
// Транзакция  накладывает свои свойства только на команды обновления данных.
// Поэтому считыванием значений мы выполняем до Multi.
MULTI
  SET mykey $val
EXEC

//В случае, если в процессе выполнения значение по ключу mykey будет изменено операциями других сессий (относительно захваченного в watch значения), то запрос завершится ошибкой.

Внутренние ссылки:

Дочерние страницы:
Обратные ссылки:

Теги: