在不破坏现有会话的情况下更改Django会话引擎

时间:2016-11-30 04:57:53

标签: django

我目前正在运行一个配置为SESSION_ENGINE django.contrib.sessions.backends.db的Django应用程序。我想将此更改为django.contrib.sessions.backends.cached_db以提升效果。

我可以在不破坏现有会话的情况下进行此更改吗?

2 个答案:

答案 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的缓存,因此如果您不更改这些变量,您应该是好的