Многочисленные кеши Django – Как выбрать, к какому сеансу идет сеанс?

У меня есть приложение Django, настроенное на использование нескольких кешей (надеюсь). Есть ли способ установить сеанс для использования определенного кеша, или он застрял на «по умолчанию»?

Вот что у меня сейчас:

CACHES = { 'default': { 'BACKEND': 'util.backends.SmartMemcachedCache', 'LOCATION': '127.0.0.1:11211', 'TIMEOUT': 300, 'ANONYMOUS_ONLY': True }, 'some_other_cache': { 'BACKEND': 'util.backends.SmartMemcachedCache', 'LOCATION': '127.0.0.1:11211', 'TIMEOUT': 300, 'ANONYMOUS_ONLY': True, 'PREFIX': 'something' }, } SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' 

One Solution collect form web for “Многочисленные кеши Django – Как выбрать, к какому сеансу идет сеанс?”

cached_db и cache не поддерживают его, но его легко создать:

 from django.contrib.sessions.backends.cache import SessionStore as CachedSessionStore from django.core.cache import get_cache from django.conf import settings class SessionStore(CachedSessionStore): """ A cache-based session store. """ def __init__(self, session_key=None): self._cache = get_cache(settings.SESSION_CACHE_ALIAS) super(SessionStore, self).__init__(session_key) 

Нет необходимости в cached_db так как Redis настойчив 🙂


При использовании Memcached и cached_db его немного сложнее из-за того, как этот SessionStore реализован. Мы просто заменим его полностью:

 from django.conf import settings from django.contrib.sessions.backends.db import SessionStore as DBStore from django.core.cache import get_cache class SessionStore(DBStore): """ Implements cached, database backed sessions. Now with control over the cache! """ def __init__(self, session_key=None): super(SessionStore, self).__init__(session_key) self.cache = get_cache(getattr(settings, 'SESSION_CACHE_ALIAS', 'default')) def load(self): data = self.cache.get(self.session_key, None) if data is None: data = super(SessionStore, self).load() self.cache.set(self.session_key, data, settings.SESSION_COOKIE_AGE) return data def exists(self, session_key): return super(SessionStore, self).exists(session_key) def save(self, must_create=False): super(SessionStore, self).save(must_create) self.cache.set(self.session_key, self._session, settings.SESSION_COOKIE_AGE) def delete(self, session_key=None): super(SessionStore, self).delete(session_key) self.cache.delete(session_key or self.session_key) def flush(self): """ Removes the current session data from the database and regenerates the key. """ self.clear() self.delete(self.session_key) self.create() 
  • Неправильно Конфигурировано: модуль промежуточного программного обеспечения «django.middleware.csrf» не определяет класс «CsrfResponseMiddleware»
  • django - DetailView, как отображать две модели одновременно
  • Пользовательские шаблоны admin django не работают
  • Союз и пересечение в Джанго
  • Риски Django SECRET_KEY
  • пытается установить lxml на max osx leopard
  • django-import-export не может заставить его работать
  • Условный SMS-ответ с Django / Twilio
  • Heroku: фоновые задачи в Python с RQ
  • Как включить связанные поля модели с помощью Django Rest Framework?
  • TypeError at / __init __ () принимает ровно 1 аргумент (2)
  • Python - лучший язык программирования в мире.