Hãy xem xét hai giao dịch đồng thời xảy ra vào lúc nửa đêm. Cả hai đều có thể thực thi get (dt_key), nhưng một sẽ thực thi khối MULTI / EXEC trước. Nó sẽ đặt lại bộ đếm, đặt ngày mới, tăng bộ đếm. Cái thứ hai cũng sẽ nhập vào khối MULTI / EXEC của nó, nhưng vì giá trị của 'dt' đã thay đổi, quá trình thực thi sẽ không thành công và incr_daily_number sẽ được gọi lại. Lần này get (dt_key) sẽ trả về ngày mới, vì vậy khi khối MULTI / EXEC được thực thi, bộ đếm sẽ được tăng dần mà không cần đặt lại. Hai giao dịch sẽ trả về ngày mới với các giá trị bộ đếm khác nhau.
Vì vậy, tôi tin rằng không có điều kiện chủng tộc ở đây và các cặp (ngày, số) sẽ là duy nhất.
Bạn cũng có thể đã triển khai điều này bằng cách sử dụng tập lệnh Lua phía máy chủ (mà việc thực thi luôn là nguyên tử). Nó thường thuận tiện hơn.
Lưu ý rằng trên thực tế, không có cái gọi là khóa Redis. Cơ chế khóa có sẵn trong API được cung cấp bởi ứng dụng khách Python - không phải bởi máy chủ Redis. Nếu bạn nhìn vào cách triển khai của nó, bạn sẽ nhận ra nó cũng dựa trên các khối SETNX + WATCH / MULTI / EXEC hoặc tập lệnh Lua.