深夜に発生する2つの同時トランザクションについて考えてみます。どちらもget(dt_key)を実行できますが、一方は最初にMULTI/EXECブロックを実行します。カウンターをリセットし、新しい日付を設定し、カウンターをインクリメントします。 2番目のものもMULTI/EXECブロックに入りますが、'dt'の値が変更されたため、実行は失敗し、incr_daily_numberが再度呼び出されます。今回はget(dt_key)が新しい日付を返すため、MULTI / EXECブロックが実行されると、カウンターはリセットされずにインクリメントされます。 2つのトランザクションは、異なるカウンター値で新しい日付を返します。
したがって、ここには競合状態はなく、(日付、数)のカップルは一意であると思います。
サーバー側のLuaスクリプト(実行は常にアトミック)を使用してこれを実装することもできます。通常はもっと便利です。
実際には、Redisロックのようなものはないことに注意してください。 APIで利用可能なロックメカニズムは、RedisサーバーではなくPythonクライアントによって提供されます。その実装を見ると、SETNX + WATCH / MULTI/EXECブロックまたはLuaスクリプトにも基づいていることがわかります。