django缓存会话

fre*_*ish 3 python django memcached caching django-sessions

我有两个问题:

1)我想知道是否使用

django.contrib.sessions.backends.cache
Run Code Online (Sandbox Code Playgroud)

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

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

Jer*_*zyk 5

重新1.

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

此额外流量加上您的正常应用流量可能会轻易破坏您的数据库性能.

回覆.2.

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

要做到这一点,我可能会使用缓存:每次用户登录时,检查缓存中是否有密钥(例如用户:<user_id>),存储的值将是会话ID,如果当前会话不同则存储一个 - 过期的旧会话,存储新的会话ID.

但即使这个也不总是有效,有时浏览器标签/窗口共享相同的cookie(特别是当SESSION_EXPIRE_AT_BROWSER_CLOSE为False时 - 默认)并且会话仅基于cookie.