在 django db + 基于缓存的会话上使用 django 签名的 cookie 会话的性能比较?

Posted

技术标签:

【中文标题】在 django db + 基于缓存的会话上使用 django 签名的 cookie 会话的性能比较?【英文标题】:Performance comparison of using django signed cookie session over django db + cache based session? 【发布时间】:2012-08-21 22:41:44 【问题描述】:

Django 1.4 提供了几种维护django sessions 的方法:

我对使用的看法:

i) 仅缓存:不太可取,用户会话可能会从内存缓存中清除。

ii) Db + 缓存 (cached_db):首选、简单且安全的解决方案。

iii) 签名的 cookie 会话:首选,没有数据库命中。

假设会话数据非常小,即在 cookie 中存储它没有问题。在数据库 + 内存缓存驱动的会话引擎上使用签名 cookie 是否有任何性能优势?对于 N 个并发新用户,将保存 N 个数据库命中的顺序。这将减少数据库服务器在单位时间内必须处理的总查询数。

更新:我们发现 redis 或 aerospike 是 django 真正强大且高吞吐量的会话后端。我们使用redis 作为会话 后台

【问题讨论】:

【参考方案1】:

您必须能够处理 N 个并发查询(N - 并发新 用户)。

您只能在非常大的范围内看到差异。您必须是悲观主义者(服务器宕机、备份不良、amazon bancrupcy),并且您的数据库必须能够在高峰时段处理所有用户。

使用 cookie 会话的 10 000 000 名用户将额外花费 0 美元,iframe 和手机问题 10 000 000 个用户使用缓存会话每天将花费您数百或不到数百美元,如果重启会丢失会话 使用 cache_db 会话的 10 000 000 个用户每天将花费您数千美元(任何能够一次处理 1000 000 次点击的持久存储,10% 的用户)

我使用 redis 后端(定期保存到磁盘),可以切换到 memcached 服务集群。

http://www.icis.com/blogs/icis-chemicals-confidential/files/2011/10/19/goodcheapfast.jpg

【讨论】:

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' 会话数据存储在哪里?

以上是关于在 django db + 基于缓存的会话上使用 django 签名的 cookie 会话的性能比较?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Redis 与 memcached+db 作为 Django 会话系统的优缺点?

Django + JSON Web 令牌 + 禁用基于会话的授权

在基于临时会话的表上创建索引后运行统计信息

Django - 数据库支持的会话和基于 Cookie 的会话之间的区别?

如何在 django 中关闭浏览器上的会话

redis数据库如何用Django框架缓存数据