Почему Django не использует указанный серверный кэш?
В качестве простого теста я пытаюсь настроить серверную часть кэша, используемую Django, на что-то отличное от значения по умолчанию django.core.cache.backends.locmem.LocMemCache
. Я использую пользовательский серверный модуль, определенный в пакете django-bmemcached, который использует модуль python-binary-memcached для доступа к экземпляру Memcached с аутентификацией. Я настроил серверную часть в файле settings.py
с соответствующим фрагментом ниже:
CACHES = {
'default': {
'BACKEND': 'django_bmemcached.memcached.BMemcached',
'LOCATION': <ip>:<port>,
'OPTIONS': {
'username': <username>,
'password': <password>,
}
},
}
Файл settings.py
используется приложением, но используемый кэш по умолчанию не является указанным внутренним кэшем:
>>> from django.conf import settings
>>> print(settings.CACHES)
{'default': {'BACKEND': 'django_bmemcached.memcached.BMemcached', 'LOCATION': <ip>:<port>, 'OPTIONS': {'username': <username>, 'password': <password>}}}
>>> from django.core.cache import caches
>>> print(caches['default'])
<django.core.cache.backends.locmem.LocMemCache object at 0x73bf66531720>
Это не вызвано тем, что сторонний пакет переопределяет серверную часть кэша, и к экземпляру Memcached можно получить доступ и успешно выполнить операции, если создан экземпляр клиента для серверной части: bmemcached.Client(<ip>:<port>, <username>, <password>)
.
Использование другой привязки, такой как pymemcache, и настройка серверной части на поддерживаемый Django django.core.cache.backends.memcached.PyMemcacheCache
по-прежнему приводит к описанным выше проблемам, когда используемый по умолчанию кэш не используется. указанный серверный сервер кэша.
Если это вообще возможно, я бы хотел иметь возможность просто использовать Django cache API, from django.core.cache import cache
, чтобы иметь возможность доступа к экземпляру Memcached на основе серверной части, установленной в settings.py
.
Возможно, я пропустил какую-то настройку? Возвращается ли Django к настройкам по умолчанию в кэше памяти из-за молчаливого исключения? Я был бы признателен за любую информацию!
В файле settings.py
до того, как были обнаружены настройки кэша, я создал экземпляр локального клиента, который использовал Django cache API и, таким образом, установил серверную часть кэша по умолчанию django.core.cache.backends.locmem.LocMemCache
.
Перенос настроек кэша в файл вверх перед созданием экземпляра локального клиента позволил установить правильную django_bmemcached.memcached.BMemcached
серверную часть, как указано.