【发布时间】:2017-11-15 04:43:28
【问题描述】:
我在 Django 中使用 memcached 来缓存整个站点。
https://docs.djangoproject.com/en/1.11/topics/cache/#the-per-site-cache
我在保存后信号处理程序方法中添加了一些代码,以便在模型中创建或更新某些对象时清除缓存。
from proximity.models import Advert
# Cache
from django.core.cache import cache
@receiver(post_save, sender=Advert)
def save_advert(sender, instance, **kwargs):
# Clear cache
cache.clear()
不幸的是,现在在创建新对象后,用户已注销。
我认为原因可能是我正在缓存会话。
# Cache config
CACHE_MIDDLEWARE_SECONDS = 31449600 #(approximately 1 year, in seconds)
CACHE_MIDDLEWARE_KEY_PREFIX = COREAPP
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.memcached.MemcachedCache",
"LOCATION": "127.0.0.1:11211",
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
我应该使用按视图缓存吗?
【问题讨论】:
-
不清楚“缓存整个站点”是什么。
-
我已经按照 django 文档中的描述缓存了整个站点,使用 'django.middleware.cache.UpdateCacheMiddleware' 和 'django.middleware.cache.FetchFromCacheMiddleware' 在中间件级别缓存请求。我添加了一个文档链接。
-
清除缓存将清除所有已保存的会话。您应该使用不同的会话后端或更改缓存方式。你真的需要缓存每一个请求吗?
-
感谢@IainShelvington,我真正需要的是缓存一些 DRF API 调用,但我找不到一个简单的方法来做到这一点,因为我不能使用装饰器'@cache_page'。然后我缓存了整个网站,然后排除了一些页面。我可以使用哪些其他会话引擎?
标签: python django django-sessions django-cache