在Django中使用READ-COMITTED级别开发项目时,我认为cache.delete会导致竞争状态,而django的信号也无济于事。
T1 T2
cache.delete
cache.get (not found)
read from database
cache.set (old value again)
commit
cache.get (old value)
如何确保缓存失效仅在事务提交时完成?
答案 0 :(得分:0)
您只应在提交事务时从缓存中删除。为确保您的事务已提交(例如,如果您使用django.middleware.transaction.TransactionMiddleware
来提交每个请求),您可以使用commit_on_success
强制提交:
from django.db import transaction
with transaction.commit_on_success():
# ... do db stuff ...
cache.delete('key')