2

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

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

4

1 回答 1

1

您应该只在事务提交后从缓存中删除。为确保您的事务已提交(例如,如果您使用django.middleware.transaction.TransactionMiddleware在每个请求上提交),您可以使用以下命令强制提交commit_on_success

from django.db import transaction
with transaction.commit_on_success():
    # ... do db stuff ...

cache.delete('key')
于 2013-09-09T14:47:20.207 回答