2013-09-05 5 views
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) 

어떻게 그 캐시 무효화 커밋 트랜잭션의 순간에만 수행되었는지 확인 할 수 있습니까?

답변

0

트랜잭션이 커밋되었을 때만 캐시에서 삭제해야합니다. (경우에 당신은 모든 요청에 ​​따라 커밋 django.middleware.transaction.TransactionMiddleware을 사용하고, 예를 들어) 트랜잭션이 커밋 된 보장하기 위해, 당신은이 commit_on_success를 사용하여 커밋 강제 할 수

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

cache.delete('key') 
+0

같은 소리 음, 커밋 계속하는 같으면 런타임의 미래 부분에서 롤백하도록하지 않겠습니다. 그것은 버전 관리 또는 캐시 관리 미들웨어 같은 것을 필요로합니다. – hurturk

+0

롤백을 수행 할 때 캐시 된 값으로 수행 할 작업을 정의해야하는 것처럼 보입니다. –