13
我試圖在使用信號保存時清除某個特定條目的緩存。無法刪除Django中特定條目的緩存
我使用的裝飾(signals
和render_to
)從django-annoying
@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)
- 的問題是,當我保存模型,我得到的輸出
"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])
CONF:
LANGUAGE_CODE = 'pt-BR'
LANGUAGES = (
('pt-BR','Portugues'),
)
- 我重新啓動Gevent Server時只更新了內容。
不知何故key'的'你的計算值值必須大於從CacheMiddleware的值不同。我會嘗試使用調試器或打印語句在'django/middleware/cache.py'' FetchFromCacheMiddleware'和'UpdateCacheMiddleware'中觀察'cache_key'的值。 – user27478
只是爲了檢查問題是否可以重現,請嘗試將緩存引擎替換爲memcached或redis。 – alecxe
如果您使用語言環境,則get_cache_key還使用語言代碼構建緩存鍵,將其添加到您的代碼中→request.LANGUAGE_CODE = settings.LANGUAGE_CODE –