事务提交时Django缓存失效?
在Django中使用READ-COMITTED级别开发项目时,我认为cache.delete会导致争用情况,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
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')
好吧,这听起来像是继续提交,这不允许我在运行时的未来部分回滚。看起来,我或者需要版本控制或者缓存管理中间件之类的东西。看起来您需要定义在回滚时如何处理缓存值。