将会话数据从自定义后端迁移到缓存后端 (Django)

Migrating session data from custom backend to cache backend (Django)

我目前 运行 一个 Django 应用程序 SESSION_ENGINE 配置为 user_sessions.backends.db(我正在使用 this 外部库)。 Django 自己的内置会话很棒,但是所有数据都隐藏在 base64 编码数据中。这个库使会话对象像其他 ORM 对象一样可访问。

我需要删除我对这个库的依赖;将 SESSION ENGINE 更改为缓存以提高性能。

我的挑战是在不破坏当前会话数据的情况下进行此更改,这就是这个问题的意义所在。鉴于其性质,库自然不包含 db 以外的后端,因此我必须扩展它。

我该如何解决这个问题?例如,在我的脑海中:i) 我应该查看 db table(s) 的内容,这个库将会话数据保存到,ii) 写入功能,在每次写入时将此数据保存到缓存内存,iii)转移到从缓存中读取(使用 db 作为后备)。

听起来对吗?很想知道此时此刻有什么注意事项,因为这是一项相当复杂的任务。提前致谢。

在我看来,最好的方法是将所有当前会话数据迁移到本机 Django 会话框架,只需重新序列化所有会话数据,保持相同的会话 ID。

首先,我要弄清楚 Session 框架是如何序列化数据的。例如,在 Django 1.10.4 上,here's what you should be looking for: django/contrib/sessions/backends/base.py#L96

然后,我会编写一个转换器,从数据库中读取当前会话数据并将其转换为本机数据。

我不确定会话 ID 是如何工作的,但看起来它们使用的是同一类型的 ID,因此应该可以这样做,然后更改 SESSION_ENGINEMIDDLEWARE_CLASSES 回到 Django 默认值,它应该可以工作。