Транзакции и смотреть заявление в Redis

Не могли бы вы объяснить мне следующий пример из "Маленькой книги Redis":

С помощью приведенного выше кода мы не сможем реализовать нашу собственную команду incr, поскольку все они выполняются вместе после вызова exec. Из кода мы не можем сделать:

redis.multi() 
current = redis.get('powerlevel') 
redis.set('powerlevel', current + 1) 
redis.exec()

Это не так, как транзакции Redis работают. Но, если мы добавим часы на уровень мощности, мы можем сделать:

redis.watch('powerlevel') 
current = redis.get('powerlevel') 
redis.multi() 
redis.set('powerlevel', current + 1) 
redis.exec()

Если другой клиент изменит значение powerlevel после того, как мы вызовем его, наша транзакция не будет выполнена. Если ни один клиент не изменит значение, набор будет работать. Мы можем выполнить этот код в цикле, пока он не заработает.

Почему мы не можем выполнить инкремент транзакции, который не может быть прерван другой командой? Почему нам нужно итерировать вместо этого и ждать, пока никто не изменит значениед транзакция начинается?

Ответы на вопрос(1)

Ваш ответ на вопрос