Django 缓存没有按预期工作
django cache not working as expected
我想向我的网站添加简单的缓存功能。我为匿名用户启用了缓存,但它没有按预期工作。我正在使用内存缓存。
settings.py
########################### caching #################################
CACHE_PORT = '11211'
CACHE_MIDDLEWARE_SECONDS = 60
CACHE_MIDDLEWARE_KEY_PREFIX = "default"
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
# Production Environment
if ON_OPENSHIFT:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '%s:%s' % (os.environ['OPENSHIFT_INTERNAL_IP'], CACHE_PORT),
}
}
CACHE_VIEW_LENGTH = datetime.now() + timedelta(30) # 30 day cache expiration
# Development Environment
else:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:%s' % CACHE_PORT,
}
}
CACHE_VIEW_LENGTH = datetime.now() + timedelta(1) # Set to 0 for development
MIDDLEWARE_CLASSES = (
#cache - must be first in middleware_classes
'django.middleware.cache.UpdateCacheMiddleware',
#cache end
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# Uncomment the next line for simple clickjacking protection:
'django.middleware.clickjacking.XFrameOptionsMiddleware',
#cache - must be last in middleware_classes
'django.middleware.cache.FetchFromCacheMiddleware',
#cache end
)
因为我已经设置了 CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
,所以如果我以登录用户身份加载页面,我将不会获得缓存版本。
我加载了索引页面,其中是我的对象列表。有 10 个对象。我通过表单添加了新对象。当我再次查看我的索引页时,我只看到 10 个对象。
所以我的问题很简单:为什么 django 忽略我的匿名设置并缓存登录用户的页面?
CACHE_MIDDLEWARE_ANONYMOUS_ONLY
选项在 Django 1.8 中被移除。这是关于那个的票:https://code.djangoproject.com/ticket/15201
当CACHE_MIDDLEWARE_ANONYMOUS_ONLY
工作时,它只是写入到缓存。当 CACHE_MIDDLEWARE_ANONYMOUS_ONLY
为 True 时,非匿名请求从不写入缓存,而是从缓存中读取。
我想向我的网站添加简单的缓存功能。我为匿名用户启用了缓存,但它没有按预期工作。我正在使用内存缓存。
settings.py
########################### caching #################################
CACHE_PORT = '11211'
CACHE_MIDDLEWARE_SECONDS = 60
CACHE_MIDDLEWARE_KEY_PREFIX = "default"
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
# Production Environment
if ON_OPENSHIFT:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '%s:%s' % (os.environ['OPENSHIFT_INTERNAL_IP'], CACHE_PORT),
}
}
CACHE_VIEW_LENGTH = datetime.now() + timedelta(30) # 30 day cache expiration
# Development Environment
else:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:%s' % CACHE_PORT,
}
}
CACHE_VIEW_LENGTH = datetime.now() + timedelta(1) # Set to 0 for development
MIDDLEWARE_CLASSES = (
#cache - must be first in middleware_classes
'django.middleware.cache.UpdateCacheMiddleware',
#cache end
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# Uncomment the next line for simple clickjacking protection:
'django.middleware.clickjacking.XFrameOptionsMiddleware',
#cache - must be last in middleware_classes
'django.middleware.cache.FetchFromCacheMiddleware',
#cache end
)
因为我已经设置了 CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
,所以如果我以登录用户身份加载页面,我将不会获得缓存版本。
我加载了索引页面,其中是我的对象列表。有 10 个对象。我通过表单添加了新对象。当我再次查看我的索引页时,我只看到 10 个对象。
所以我的问题很简单:为什么 django 忽略我的匿名设置并缓存登录用户的页面?
CACHE_MIDDLEWARE_ANONYMOUS_ONLY
选项在 Django 1.8 中被移除。这是关于那个的票:https://code.djangoproject.com/ticket/15201
当CACHE_MIDDLEWARE_ANONYMOUS_ONLY
工作时,它只是写入到缓存。当 CACHE_MIDDLEWARE_ANONYMOUS_ONLY
为 True 时,非匿名请求从不写入缓存,而是从缓存中读取。