#django #django-cache #django-caching
#django #django-cache #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)? В документации не упоминается, как это сделать.
Ответ №1:
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
Ответ №2:
Начиная с Django 1.9, get_cache
устарел. Выполните следующие действия для обращения к ключам из ‘inmem’ (дополнение к ответу римлянами):
from django.core.cache import caches
caches['inmem'].get(key)
Ответ №3:
В дополнение к ответу Римлян выше… Вы также можете условно импортировать кэш по имени и использовать кэш по умолчанию (или любой другой кэш), если запрошенный не существует.
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')
Ответ №4:
>>> from django.core.cache import caches
>>> cache1 = caches['myalias']
>>> cache2 = caches['myalias']
>>> cache1 is cache2
True
Ответ №5:
Создайте служебную функцию с именем 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)
Ответ №6:
К сожалению, вы не можете изменить, какой псевдоним кэша используется для низкоуровневых методов cache.set()
и cache.get()
.
Эти методы всегда используют кэш по умолчанию в соответствии со строкой 51 (в Django 1.3) из django.core.cache.__init__.py
:
DEFAULT_CACHE_ALIAS = 'default'
Итак, вам нужно установить в вашем кэше по умолчанию кэш, который вы хотите использовать для низкоуровневого кэша, а затем использовать другие псевдонимы для таких вещей, как кэш сайта, кэш страниц и маршрутизация кэша БД.
`