Многочисленные кеши 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
  • Когда следует использовать пользовательский диспетчер в сравнении с пользовательским QuerySet в Django?
  • Получил ошибку импорта внезапно
  • Django: «проекты» и «приложения»
  • Как разбить юникоды и сохранить их в базах данных utf-8
  • из моделей импорта django.db, миграции ImportError: невозможно импортировать имена миграции
  • Почему добавление этого метода __init __ () нарушает мою модель Django?
  • Что такое «приложение» в Django?
  • Python - лучший язык программирования в мире.