2009-04-06 4 views
9

memcached과 함께 사이트 전체 캐싱을 백엔드로 사용하고 있습니다. 기본 데이터베이스 개체가 변경되면 캐시의 페이지를 무효화하고 싶습니다. Django의 캐시에서 특정 항목을 제거 하시겠습니까?

페이지 이름이 모든 페이지에 탐색에 영향을 미치는 것에 따라 나는 (전체 캐시를 무효화한다. 내 요구에 서투른하지만 충분.

단지 페이지 내용 변경 후 나는 무효화하려는 경우 변경하는 경우

단지 해당 페이지의 캐시.

이 작업을 수행 할 수있는 간단한 방법이 있을까요?

답변

4

캐시 키가 절대 경로가 아니기 때문에 tghw의 솔루션이 실제로 작동하지 않습니다. 키는 절대 경로와 HTTP 헤더에서 계산됩니다. 예를 들어 this question을 참조하십시오.

5

내가 장고에 캐싱을 많이하지 않은,하지만 난 당신이 원하는 signals을 어떤 생각합니다.

당신에게 012를 설정할 수 있습니다.신호가 기본 객체에 있고 콜백 함수가 해당 페이지를 캐시에서 무효화하도록하십시오.

from django.core.signals import post_save 
from django.core.cache import cache 

def invalidate_cache(sender, **kwargs): 
    # invalidate cache 
    cache.delete(sender.get_absolute_url()) # or any other pertinent keys 

post_save.connect(invalidate_cache, sender=UnderlyingModel) 

업데이트 할 때 캐시에서 항목을 올바르게 제거해야합니다.

+0

cache.delete에 대해 몰랐다 sender.get_absolute_url()이 정확한 캐시 키를 가져 오나요? 사이트 전체 캐시가 키를 생성하는 방법에 대한 문서는 볼 수 없습니다. –

+0

정말 작동합니까 ?? – simplyharsh

+1

"기본적으로 장고의 캐시 시스템은 요청 된 경로 (예 :"/ stories/2005/jun/23/bank_robbed/")를 사용하여 캐시 키를 생성합니다. (http://docs.djangoproject.com/ko/dev/topics/cache/) – michuk

관련 문제