Как использовать 2 разных кеша в Django?
Мне нужно использовать 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)? Документация не упоминает, как это сделать.
6 ответов
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
С Джанго 1,9, get_cache
устарела. Выполните следующие действия, чтобы обратиться к ключам от "inmem" (дополнение к ответу римлян):
from django.core.cache import caches
caches['inmem'].get(key)
В дополнение к ответу римлян выше... Вы также можете условно импортировать кеш по имени и использовать заданный по умолчанию (или любой другой кеш), если запрошенный не существует.
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')
>>> from django.core.cache import caches
>>> cache1 = caches['myalias']
>>> cache2 = caches['myalias']
>>> cache1 is cache2
True
Создайте вспомогательную функцию с именем get_cache. Метод get_cache, на который ссылаются в других ответах, не существует в библиотеке django.core.cache в некоторых версиях django. Вместо этого используйте следующее
from django.utils.connection import ConnectionProxy
from django.core.cache import caches
def get_cache(alias):
return ConnectionProxy(caches, alias)
cache = get_cache('infile')
value = cache.get(key)
К сожалению, вы не можете изменить, какой псевдоним кэша используется для низкоуровневого cache.set()
а также cache.get()
методы.
Эти методы всегда используют кэш по умолчанию согласно строке 51 (в Django 1.3) django.core.cache.__init__.py
:
DEFAULT_CACHE_ALIAS = 'default'
Поэтому вам нужно установить кэш по умолчанию на кеш, который вы хотите использовать для низкоуровневого кеша, а затем использовать другие псевдонимы для таких вещей, как кеш сайта, кеш страниц и маршрутизация кеша базы данных. `