2012-10-04 5 views
2

내 쿼리 중 하나에서만 컨텍스트 캐시를 비활성화하고 싶습니다. 나는 이런 식으로 그것을 할 수 있다고 생각 :NDB query fetch() 및 ContextOptions

MyModel.query(ancestor=user.key).fetch(100, options=ContextOptions(use_cache=False, use_memcache=False)) 

또는

MyModel.query(ancestor=user.key).fetch(100, config=ContextOptions(use_cache=False, use_memcache=False)) 

하지만 나를 위해 작동하지 않습니다. 그래서 내 질문은 가져 오기를 사용하여 쿼리에 대한 캐시 및 memcache를 해제하려면 어떻게합니까?

추신 : GET의 경우

()이 완벽하게 작동합니다 :

MyModel.query(ancestor=user.key).get(use_cache=False, use_memcache=False) 

감사합니다!

답변

2

캐싱은 get()의 경우에만 지원됩니다. docs :

쿼리는 모든 캐시에서 값을 조회하지 않습니다. 그러나 쿼리 결과는 이며, 캐시 정책이 그렇게 말하면 컨텍스트 캐시에 다시 쓰여집니다 (그러나 는 Memcache에 없음). set_cache_policy의

ctx.set_cache_policy(lambda key: False) 

인수는 함수가 하나 PARAM을 가지고 있어야한다 (키) : 캐시 된 것으로 보인다 일부 기관, 문제가 발생하면

, 당신은 아마 상황에 맞는 캐시 정책을 변경해야 키를 캐시해야하는 경우 boolean을 반환합니다. 여기서 항상 False를 반환하므로 엔티티는 캐시되지 않습니다.

4

당신은 그냥 당신이 몇 가지 버그를보고있는 원하는 효과가없는 경우

MyModel.query(........).fetch(limit, use_cache=False) 

을 쓸 수 있어야합니다. 이 목적을 위해 전역 캐시 정책을 설정할 필요가 없습니다.

(과거의 fetch()는 use_cache = ...를 지원하지 않았지만 그 문제는 오래 전부터 고쳐졌지만 실제로는 use_memcache = ...로 고민 할 필요가 없습니다. 쿼리 프로세스에서 전혀 사용하지 않습니다.)