Tôi đang cố gắng có hoạt động tăng hoặc tạo nguyên tử trong bộ đệm Django. Tôi đang sử dụng memcache như backend. Chức năng incr_async()
của khách hàng Memcache mất tham số initial_value
. Ý nghĩa là:Tăng nguyên tử Django với giá trị ban đầu
Nếu khóa chưa tồn tại trong bộ nhớ cache và bạn chỉ định một initial_value , giá trị của chính sẽ được thiết lập để giá trị ban đầu này và sau đó tăng lên.
Tuy nhiên, tôi không thấy làm thế nào tôi có thể làm điều này trong Django, như cache.incr()
tài liệu nói:
Một ValueError sẽ được nâng lên nếu bạn cố gắng để tăng hoặc giảm một chìa khóa bộ nhớ cache không tồn tại .
Dĩ nhiên tôi có thể làm:
cache.add(key,initial_value)
cache.incr(key)
Nhưng đó không phải là nguyên tử và có thể dẫn đến điều kiện chủng tộc.
Có cách nào để giữ nguyên nguyên tử của hoạt động không?
Xem câu hỏi này rất giống nhau: http://stackoverflow.com/questions/7967477/django-memcache-code-review-compare-and -bộ. Một câu trả lời cho thấy rằng việc thực thi python của memcache không thực sự hỗ trợ 'incr' với dự phòng bẩm sinh. Bạn phải 'thêm' và sau đó' incr' trong hai hoạt động riêng biệt theo người dùng đó. Bạn có thể muốn kiểm tra tính hợp lệ của điều đó. –