Rozważ dwie równoczesne transakcje mające miejsce o północy. Oba mogą wykonać get(dt_key), ale jeden z nich wykona najpierw blok MULTI/EXEC. Zresetuje licznik, ustawi nową datę, zwiększy licznik. Drugi wprowadzi również w swoim bloku MULTI/EXEC, ale ponieważ wartość 'dt' uległa zmianie, wykonanie się nie powiedzie i incr_daily_number zostanie wywołane ponownie. Tym razem get(dt_key) zwróci nową datę, więc po wykonaniu bloku MULTI/EXEC licznik zostanie zwiększony bez żadnego resetu. Dwie transakcje zwrócą nową datę z różnymi wartościami liczników.
Uważam więc, że nie ma tu żadnych warunków rasowych i że pary (data, liczba) będą wyjątkowe.
Można to również zaimplementować za pomocą skryptu Lua po stronie serwera (którego wykonanie jest zawsze atomowe). Zwykle jest to wygodniejsze.
Zauważ, że w rzeczywistości nie ma czegoś takiego jak blokada Redis. Mechanizm blokowania dostępny w API zapewnia klient Pythona, a nie serwer Redis. Jeśli spojrzysz na jego implementację, zdasz sobie sprawę, że jest ona również oparta na blokach SETNX + WATCH/MULTI/EXEC lub skryptach Lua.