Транзакции
Transactions
https://redis.io/docs/manual/transactions/
Как же работают транзакции в Redis
https://habr.com/ru/post/165223/
Оптимистичные блокировки | В рамках сессии позволяет установить наблюдение за значением по ключу. Если значение будет изменено, то redis оповестит об этом и позволит откатить операцию, либо выполнить заново. Как работает Redis при одновременном доступе нескольких клиентов? |
Пессимистичные блокировки | Не содержит из коробки, но позволяет сконструировать логику блокировки или семафора (ограничение степени параллелизма при выполнении секции) через ручную реализацию. Distributed Locks with Redis Распределенные блокировки с применением Redis |
Команда MULTI обозначает, что все команды, идущие после и выполняющие изменение данных, будут накапливаться и будут выполнены при вызове команды EXEC. При этом команды чтения данных не попадают в транзакцию а выполняются сразу же.
Шаблон оптимистичной блокировки.
WATCH mykey
// Считываем значение в переменную и обновляем ее
val = GET mykey
val = val + 1
// Запускаем обновляющую транзакцию
// Транзакция накладывает свои свойства только на команды обновления данных.
// ПОэтому считыванием значений мы выполняем до Multi.
MULTI
SET mykey $val
EXEC
//В случае, если в процессе выполнения значение по ключу mykey будет изменено операциями других сессий (относительно захваченного в watch значения), то запрос завершится ошибкой.