Transacciones y declaración de reloj en Redis

¿Podría explicarme el siguiente ejemplo de "The Little Redis Book":

Con el código anterior, no podríamos implementar nuestro propio comando incr ya que todos se ejecutan juntos una vez que se llama a exec. Desde el código, no podemos hacer:

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

Así no es como funcionan las transacciones Redis. Pero, si agregamos un reloj a powerlevel, podemos hacer:

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

Si otro cliente cambia el valor de powerlevel después de que hayamos llamado a verlo, nuestra transacción fallará. Si ningún cliente cambia el valor, el conjunto funcionará. Podemos ejecutar este código en un bucle hasta que funcione.

¿Por qué no podemos ejecutar incrementos en transacciones que no pueden ser interrumpidas por otro comando? ¿Por qué necesitamos iterar y esperar hasta que nadie cambie de valor?antes de comienza la transacción?

Respuestas a la pregunta(1)

Su respuesta a la pregunta