13
신호를 사용하여 저장된 특정 항목 하나에 대한 캐시를 제거하려고합니다.Django에서 특정 항목에 대한 캐시를 삭제할 수 없습니다.
@signals.post_save(sender=Artigo)
def artigo_post_save(instance, **kwargs):
from django.http import HttpRequest
from django.utils.cache import get_cache_key
from django.core.cache import cache
# cache.delete(instance.get_absolute_url()) # not work
request = HttpRequest()
request.method = "GET"
request.path = '/' + instance.get_absolute_url()
print 'request path: ', request.path
key = get_cache_key(request=request,
key_prefix=settings.CACHE_MIDDLEWARE_KEY_PREFIX)
print "found key" if cache.has_key(key) else "notfound key"
if cache.has_key(key):
cache.delete(key)
cache.set(key, None, 0)
- 문제에서 장식 (
signals
및render_to
)를 사용하고 내가 모델을 저장할 때, 내가 출력"notfound key"
를 얻을, 그래서 캐시는 제거하지 않고 계속 request.path
내 입장 경로를 제대로 가리 킵니다.
일부 설정 :
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
CACHE_MIDDLEWARE_KEY_PREFIX = 'cache'
CACHE_MIDDLEWARE_SECONDS = 600
CACHES = {
'default': {
'LOCATION': '',
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
},
}
그리고보기 :
@cache_page(60 * 60)
@render_to('artigo.html')
def artigo(request, categoria_slug, extra_slug="", artigo_slug=""):
...
감사합니다.
는 편집 :
나는 Ilvar 변경을했고, 지금은 수익으로 "found key"
받고 있어요하지만, 난 여전히 캐시를 삭제할 수 없습니다 :
key = _generate_cache_header_key(key_prefix=settings.CACHE_MIDDLEWARE_KEY_PREFIX, request=request)
key = key.replace(settings.LANGUAGE_CODE, settings.LANGUAGES[0][0])
컨퍼런스 :
LANGUAGE_CODE = 'pt-BR'
LANGUAGES = (
('pt-BR','Portugues'),
)
- 을 Gevent Server를 다시 시작할 때만 컨텐츠가 업데이트됩니다.
은 어떻게 든 key' '의 계산 된 값 값은 CacheMiddleware의 값과 달라야합니다, 백엔드에 있습니다. 디버거 나 print 문을 사용하여'django/middleware/cache.py'' FetchFromCacheMiddleware'와'UpdateCacheMiddleware'에서'cache_key'의 값을 관찰 해보려고합니다. – user27478
문제를 재현 할 수 있는지 확인하려면 memcached 또는 redis와 같은 smth에 캐싱 엔진을 교체하십시오. – alecxe
로케일을 사용하는 경우 get_cache_key는 언어 코드를 사용하여 캐시 키를 작성하고이를 코드 → 요청에 추가합니다 .LANGUAGE_CODE = settings.LANGUAGE_CODE –