设置多个Django缓存后端

时间:2016-05-26 17:45:39

标签: django caching django-views

在Django项目中,我按如下方式设置缓存后端:

CACHES = {
  'default': {
    'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
  },
  'filemem': {
    'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
    'LOCATION': '/var/tmp/django_cache',
  }
} 

我正在使用filemem来缓存特定守护程序任务的结果,而default缓存则用于其他所有任务。

我已经读过LocMemCache是Django在没有指定时使用的默认缓存。如果这是正确的,那么从技术上讲,只需将以下代码段添加到我的settings.py,就应该等同于上面的代码段:

CACHES = {
  'filemem': {
    'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
    'LOCATION': '/var/tmp/django_cache',
  }
} 

所以这是我的问题。这两个片段是否相同?或者,如果我要指定非默认缓存,我还必须指定default吗?请指教。我是Django缓存的新手。

1 个答案:

答案 0 :(得分:2)

为了在Django中使用多个缓存后端,它们都需要存在于CACHES字典中。有几种方法可以做到这一点,但你的第二个片段不是其中之一。

你可以这样做,但我从来没有见过有人在实践中这样做:

from django.conf.global_settings import CACHES

CACHES['filemem'] = {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/var/tmp/django_cache',
      }

通常人们会明确声明他们将使用的所有CACHE后端,如下所示:

CACHES = {
  'default': {
    'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
  },
  'filemem': {
    'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
    'LOCATION': '/var/tmp/django_cache',
  }
} 

但是在这个片段中,你只用filemem缓存覆盖缓存dict:

CACHES = {
  'filemem': {
    'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
    'LOCATION': '/var/tmp/django_cache',
  }
}