Django缓存事务提交失效?

时间:2013-09-05 11:50:12

标签: django caching transactions memcached cache-invalidation

在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)

如何确保缓存失效仅在事务提交时完成?

1 个答案:

答案 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')