gpt4 book ai didi

python - Django 多个缓存 - 如何选择 session 进入哪个缓存?

转载 作者:行者123 更新时间:2023-11-30 23:49:47 25 4
gpt4 key购买 nike

我有一个 Django 应用程序设置为使用多个缓存(我希望如此)。有没有办法将 session 设置为使用特定缓存,还是停留在“默认”状态?

这是我现在拥有的:

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'

最佳答案

cached_dbcache 后端不支持它,但创建您自己的后端很容易:

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()

关于python - Django 多个缓存 - 如何选择 session 进入哪个缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7522721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com