我目前正在运行一个配置为SESSION_ENGINE
django.contrib.sessions.backends.db
的Django应用程序。我想将此更改为django.contrib.sessions.backends.cached_db
以提升效果。
我可以在不破坏现有会话的情况下进行此更改吗?
答案 0 :(得分:1)
是的,您可以在没有登录用户突然发现自己被注销的情况下进行此更改。那是因为cached_db首先检查memcache的密钥,如果在密钥中找不到它,则转到数据库。因此,进行此更改不会导致会话数据丢失。来自cached_db的代码片段
def load(self):
try:
data = self._cache.get(self.cache_key)
except Exception:
# Some backends (e.g. memcache) raise an exception on invalid
# cache keys. If this happens, reset the session. See #17810.
data = None
if data is None:
# Duplicate DBStore.load, because we need to keep track
# of the expiry date to set it properly in the cache.
但请注意,缓存的会话后端有点过分。根据您拥有的中间件,会话对象可能会经常更新,每次请求都会更新,如果只是为了更改过期日期。在这种情况下,您会发现数据库一直在被写入。这意味着必须丢弃缓存的值。
答案 1 :(得分:1)
你应该能够。 cached_db 后端只是数据库支持的持久性 db 后端的直写缓存,可加快您的读取查询速度。它不会加快您的写入查询速度,因此您应该尝试查看您正在阅读和编写会话数据的数量。
您的Django SECRET_KEY设置确定您的会话密钥哈希参数以及Session settings确定您将用于会话和会话TTL的缓存,因此如果您不更改这些变量,您应该是好的