Django缓存在事务提交时失效



在Django中以READ-COMITED级别开发项目时,我认为cache.delete会导致竞争条件,而Django的信号不会有多大帮助。

T1                          T2
                            cache.delete
cache.get (not found)
read from database
cache.set (old value again)
                            commit
                            cache.get (old value)

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

只有在事务提交后,才应从缓存中删除。为了确保您的事务已经提交(例如,如果您使用django.middleware.transaction.TransactionMiddleware对每个请求进行提交),您可以使用commit_on_success:强制提交

from django.db import transaction
with transaction.commit_on_success():
    # ... do db stuff ...
cache.delete('key')

相关内容

  • 没有找到相关文章

最新更新