事务提交时Django缓存失效?

事务提交时Django缓存失效?,django,caching,transactions,memcached,cache-invalidation,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

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

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

您应该仅在事务提交时从缓存中删除。为确保您的事务已提交(例如,如果您使用
django.middleware.transaction.transaction中间件
在每次请求时提交),您可以使用
commit\u成功时强制提交

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

cache.delete('key')

好吧,这听起来像是继续提交,这不允许我在运行时的未来部分回滚。看起来,我或者需要版本控制或者缓存管理中间件之类的东西。看起来您需要定义在回滚时如何处理缓存值。