我有两个问题:
1)我想知道是否使用
django.contrib.sessions.backends.cache
用于存储会话真的可以提高网站的性能吗?假设有大约25,000个并发用户。每个用户进行许多数据库更改(例如浏览器游戏)。差异是否显着?
2)同时使用缓存会话(不带数据库):如何检查给定用户是否已登录(不允许在同一帐户上多次登录)?
答案 0 :(得分:5)
重新1。
从我的经验来看差异很大。 在您的方案中,每次创建或更改会话时 - 这将生成数据库写入。 每次用户访问站点时,都会生成数据库读取。 将其移出数据库 - 每个请求至少保存一个查询。
此额外流量加上正常的应用流量可能会轻易破坏您的数据库性能。
重。 2。
即使对于db支持的会话,也没有明确的方法来确保用户被记录一次(读取所有会话数据,去除它然后过滤不是一个明确的方法:))
这样做我可能会使用缓存: 每次用户登录时,检查缓存中是否有密钥(例如用户:< user_id>),存储的值将是会话ID,如果当前会话不同则存储一个 - 过期的旧会话,存储新的会话ID。
但是即使这个也不总是工作,有时浏览器标签/窗口共享相同的Cookie(特别是当SESSION_EXPIRE_AT_BROWSER_CLOSE为False时 - 默认)并且会话完全基于cookie。