Django и python memcached и сессионный движок - PullRequest
0 голосов
/ 05 октября 2018

У меня есть вопрос о настройке кэша с memcached в проекте django.

в файле settings.py, который у меня есть:

CACHES = {
'default': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': '127.0.0.1:11211',
    'TIMEOUT': 120
 }
}

он работает, но по умолчанию session_engine вdjango - это django.contrib.sessions.backends.db , но когда я изменяю настройку на django.contrib.sessions.backends.cache , у меня естьследующая ошибка:

 The request's session was deleted before the request completed

Я использую версию django django 1.11

Я искал в сообществе похожие вопросы, но не смог найти решение

Когда я использую параметр: django.contrib.sessions.backends.cached_db , он работает, но затем снова использует таблицу в базе данных, если я правильно понимаю.

Еще одна ошибка, которую я получаю:

The request's session was deleted before the request completed.
The user may have logged out in a concurrent request, for example.

Хорошо, чтобы ответить на мой вопрос (методом проб и ошибок):

Из документов Django https://docs.djangoproject.com/en/2.1/topics/http/sessions/

Set SESSION_ENGINE to "django.contrib.sessions.backends.cache" for a
simple caching session store. Session data will be stored directly in your    
cache. However, session data may not be persistent: cached data can be 
 evicted if the cache fills up or if the cache server is restarted.

For persistent, cached data, set SESSION_ENGINE to 
"django.contrib.sessions.backends.cached_db". This uses a write-through 
cache – every write to the cache will also be written to the database.
Session reads only use the database if the data is not already in the    
cache.

итоговые настройки для memcached, которые я использую:

SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
SESSION_CACHE_ALIAS = "default"

CACHES = {
'default': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': '127.0.0.1:11211',
    'TIMEOUT': 120
}

}

1 Ответ

0 голосов
/ 05 октября 2018

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

sudo apt-get -y install memcached
sudo service memcached restart

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...