Transakcje i oświadczenie obserwacyjne w Redis

Czy możesz mi wyjaśnić następujący przykład z „The Little Redis Book”:

Z powyższym kodem nie bylibyśmy w stanie zaimplementować naszego własnego polecenia incr, ponieważ wszystkie są wykonywane razem po wywołaniu exec. Z kodu nie możemy zrobić:

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

Nie tak działają transakcje Redis. Ale jeśli dodamy zegarek do powerlevel, możemy zrobić:

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

Jeśli inny klient zmieni wartość powerlevel po wywołaniu go, nasza transakcja zakończy się niepowodzeniem. Jeśli żaden klient nie zmieni wartości, zestaw będzie działać. Możemy wykonać ten kod w pętli, dopóki nie zadziała.

Dlaczego nie możemy wykonać przyrostu w transakcji, której nie można przerwać innym poleceniem? Dlaczego musimy zamiast tego iterować i czekać, aż nikt nie zmieni wartościprzed zaczyna się transakcja?

questionAnswers(1)

yourAnswerToTheQuestion