Django per-view缓存不缓存

时间:2013-08-16 04:17:24

标签: django caching heroku memcached

我正在尝试设置每个视图的缓存并且已经阅读了几次文档,尽管它仍然不起作用。

我确实看到正在使用Memcache,但它似乎不是我在那里更新的时间戳。

MIDDLEWARE_CLASSES = (
    'django.middleware.gzip.GZipMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'web.middleware.WebMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
    'django.middleware.http.ConditionalGetMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'django.middleware.cache.UpdateCacheMiddleware',
)


# Memcache

os.environ['MEMCACHE_SERVERS'] = os.environ.get('MEMCACHIER_SERVERS', '').replace(',', ';')
os.environ['MEMCACHE_USERNAME'] = os.environ.get('MEMCACHIER_USERNAME', '')
os.environ['MEMCACHE_PASSWORD'] = os.environ.get('MEMCACHIER_PASSWORD', '')

CACHES = {
  'default': {
    'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
    'TIMEOUT': 500,
    'BINARY': True,
    'OPTIONS': { 'tcp_nodelay': True }
  }
}

# URL conf

cache_ttl = 24 * 60 * 60

url(r'^categories/$', cache_page(cache_ttl)(main.categories)),

# View

@ensure_csrf_cookie
def categories(request):

1 个答案:

答案 0 :(得分:1)

我认为您的代码中存在一些错误:)

  1. UpdateCacheMiddleware必须是第一个中间件,FetchFromCacheMiddleware必须是最后一个(https://docs.djangoproject.com/en/dev/topics/cache/#the-per-site-cache
  2. 不知道'django_pylibmc'是否是你的cachebackend中的快捷方式,但在我的设置中它是“django.core.cache.backends.memcached.PyLibMCCache”
  3. 也许这有帮助。