python - 无法删除 Django 中特定条目的缓存

标签 python django caching

我正在尝试清除使用信号保存的一个特定条目的缓存。

我正在使用来自 django-annoying 的装饰器(signalsrender_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'
     },
}

和 View :

@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])

session :

LANGUAGE_CODE = 'pt-BR'

LANGUAGES = (
        ('pt-BR','Portugues'),
)
  • 我只有在重新启动 Gevent 服务器时才会更新内容。

最佳答案

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')

您是否尝试过使用另一个缓存后端?看来您所做的一切都是正确的。

也许错误出在后端,某些配置不会让它覆盖 key 或其他奇怪的东西..

关于python - 无法删除 Django 中特定条目的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12574422/

相关文章:

caching - 如何查找缓存模拟器中的冲突未命中数

PHP MySQL 获取结果已缓存,需要刷新页面。

python - AttributeError - 类型对象 'Services' 没有属性 'service_price'

python - 如何在不覆盖值的情况下合并 N 个 Python 字典?

使用pytz的python时区转换问题

python - Django - 使用电子邮件登录

java - 正则表达式最佳实践 : multiple patterns or single one with combined expression?

python - 使用 unittest.mock.patch 测试 aiohttp 客户端

python - Pygame 矩形之间的碰撞

python - 覆盖注册 View django-allauth