Не могли бы вы объяснить мне следующий пример из книги "Маленькая книга Редиса":
С помощью приведенного выше кода мы не сможем реализовать наши собственные поскольку все они выполняются вместе после вызова exec. Из кода, мы не можем сделать:
redis.multi()
current = redis.get('powerlevel')
redis.set('powerlevel', current + 1)
redis.exec()
Это не так, как работают транзакции Redis. Но если добавить часы к powerlevel, мы можем сделать:
redis.watch('powerlevel')
current = redis.get('powerlevel')
redis.multi()
redis.set('powerlevel', current + 1)
redis.exec()
Если другой клиент меняет значение уровня мощности после того, как мы вызвали следите за этим, наша транзакция не удастся. Если ни один клиент не изменяет значение, набор будет работать. Мы можем выполнить этот код в цикле, пока он работы.
Почему мы не можем выполнить приращение транзакции, которая не может быть прервана другой командой? Почему нам нужно итератировать и ждать, пока никто не изменит значение до начала транзакции?