Как использовать 2 разных кеша в Django? - PullRequest
19 голосов
/ 10 мая 2011

Мне нужно использовать memcached и файловый кеш.Я устанавливаю кэш в настройках:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': 'c:/foo/bar',
    },
    'inmem': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}

Пустышка временная.Документы говорят:

cache.set('my_key', 'hello, world!', 30)
cache.get('my_key')

ОК, но как теперь я могу установить и получить кеш только для внутреннего кэша inmem (в будущем memcached)?В документации не упоминается, как это сделать.

Ответы [ 4 ]

26 голосов
/ 18 мая 2011
CACHES = {
  'default': {
    'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
    'LOCATION': 'c:/foo/bar',
  },
  'inmem': {
    'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
  }
} 

from django.core.cache import get_cache, cache
inmem_cache = get_cache('inmem')
default_cache = get_cache('default')
# default_cache == cache 
10 голосов
/ 28 ноября 2016

Поскольку Django 1.9, get_cache устарела.Выполните следующие действия для адресации ключей от «inmem» (дополнение к ответу римлян):

from django.core.cache import caches
caches['inmem'].get(key)
3 голосов
/ 20 марта 2014

В дополнение к ответу римлян выше ... Вы также можете условно импортировать кеш по имени и использовать по умолчанию (или любой другой кеш), если запрошенный не существует.

from django.core.cache import cache as default_cache, get_cache
from django.core.cache.backends.base import InvalidCacheBackendError

try:
    cache = get_cache('foo-cache')
except InvalidCacheBackendError:
    cache = default_cache

cache.get('foo')
0 голосов
/ 11 мая 2011

К сожалению, вы не можете изменить, какой псевдоним кэша используется для низкоуровневых методов cache.set() и cache.get().

Эти методы всегда используют кэш по умолчанию согласно строке 51 (в Django1.3) из django.core.cache.__init__.py:

DEFAULT_CACHE_ALIAS = 'default'

Таким образом, вам нужно установить кэш по умолчанию на кеш, который вы хотите использовать для низкоуровневого кеша, а затем использовать другие псевдонимы для таких вещей, как кеш сайта, кеш страниц и кеш маршрутизации.`

...