我正在尝试使用信号保存一个特定条目的缓存。
使用装饰器(signals
和render_to
)
@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'),
)
答案 0 :(得分:2)
cache.set(key,None,0)应该足够了,我之前一直在清除缓存键。
如果你能够,你可以试试cache.clear(),清除它吗?只是为了看它是否有效。
您的缓存密钥是否可删除?输出是否符合预期?
cache.set('testkey', 'testvalue', 600)
cache.get('testkey')
cache.delete('testkey')
cache.get('testkey')
cache.set('testkey', 'testvalue2', 600)
cache.set('testkey', 'another value', 600)
cache.get('testkey')
您是否尝试过另一个缓存后端?看起来你所做的一切都是正确的。
也许错误在后端,一些配置不会让它覆盖键或奇怪的东西..