Это не самый обычный способ сделать это IMO (самый обычный способ, вероятно, это использовать блокировку в СУБД), но использование WATCH, MULTI, EXEC
выглядит как CAS и некажется мне слишком странным
Я бы предположил, что автор Redis намеревался использовать WATCH
таким образом.Очевидно, что производительность зависит от того, как эта вещь реализована (чего я не знаю), но я держу пари, что она будет работать довольно хорошо.
Это потому, что, вероятно, будет очень мало или почти нет конкуренции за одни и те же ключи в вашей ситуации (какова вероятность того, что пользователь лихорадочно выдаст транзакции для себя)?для первой операции своп будет действительно хорошо.Поэтому повторная попытка произойдет только в очень редких случаях.Поскольку Redis кажется заслуживающей доверия платформой, они также, вероятно, знают, что делают (т.е. меньше споров = легкая работа для Redis, поэтому он, вероятно, справится с этим!).