Помислете за две едновременни транзакции, които се случват в полунощ. И двете могат да изпълнят get(dt_key), но единият първо ще изпълни блока MULTI/EXEC. Той ще нулира брояча, ще зададе нова дата, ще увеличи брояча. Вторият ще влезе също в своя MULTI/EXEC блок, но тъй като стойността на 'dt' се е променила, изпълнението ще се провали и incr_daily_number ще бъде извикан отново. Този път get(dt_key) ще върне новата дата, така че когато MULTI/EXEC блокът ще бъде изпълнен, броячът ще бъде увеличен без нулиране. Двете транзакции ще върнат новата дата с различни стойности на брояча.
Така че вярвам, че тук няма условия за състезание и че двойките (дата, брой) ще бъдат уникални.
Можете също така да приложите това с помощта на Lua скрипт от страна на сървъра (чието изпълнение винаги е атомарно). Обикновено е по-удобно.
Имайте предвид, че всъщност няма такова нещо като заключване на Redis. Механизмът за заключване, наличен в API, се предоставя от клиента на Python, а не от Redis сървъра. Ако погледнете реализацията му, ще разберете, че също се основава на SETNX + WATCH/MULTI/EXEC блокове или Lua скриптове.