4

我有两个问题:

1)我想知道是否使用

django.contrib.sessions.backends.cache

存储会话真的可以提高网站的性能吗?假设有大约 25,000 个同时用户。每个用户进行许多数据库更改(例如浏览器游戏)。差异甚至很明显吗?

2)再次使用缓存会话(没有数据库):如何检查给定用户是否已登录(不允许同一帐户多次登录)?

4

1 回答 1

6

重新 1。

根据我的经验,差异是巨大的。在您的场景中,每次创建或更改会话时 - 这将生成一个数据库写入。每次用户访问站点时 - 都会生成一个数据库读取。将其移出数据库 - 每个请求至少保存一个查询。

这个额外的流量,加上您的正常应用程序流量可能很容易破坏您的数据库性能。

关于。2.

即使对于 db 支持的会话,也没有明确的方法来确保用户被记录一次(读取所有会话数据,对其进行 depickling 然后过滤不是一个明确的方法:))

为此,我可能会使用缓存:每次用户登录时,检查缓存中是否有一个键(例如 user:<user_id>),存储的值将是会话 id,如果当前会话不同,则存储一个 - 过期旧会话,存储新会话 ID。

但即使这个也不总是有效,有时浏览器选项卡/窗口共享相同的 cookie(尤其是当 SESSION_EXPIRE_AT_BROWSER_CLOSE 为 False - 默认值时)并且会话完全基于 cookie。

于 2011-03-16T01:35:36.413 回答