Memcache 或数据库存储是要走的路。在这两种情况下,随着站点的扩展,您的许多服务器都将能够获取/设置会话数据。
我过去都使用过这两种方法,你应该知道一些事情:
1)两者都可以存储任意数据
Rails 会话被视为哈希,存储的值是该哈希的序列化版本。在 Memcache 中,键 => 值对是 session_id => session_contents。在数据库存储中,您有两列,一列用于 id,另一列用于内容。
2) Memcache 快一点
每一点速度都有帮助;为此,Memcache 将比数据库快一点。
3) Memcache 在填满时倾向于丢弃键
如果您的 Memcache 实例开始耗尽内存,它会开始删除键。它通过首先删除最旧的来做到这一点。由于会话被积极使用,您可以通过在每个请求上勾选会话数据来缓解这种情况;这使它们保持在堆的顶部。但是,如果您的实例真的满了,您可能会开始在地板上丢弃会话并将用户注销。这通常只是在非常快速增长的情况下才会出现的问题,例如如果您被点划线。否则,很容易关注您的 Memcache 服务器并确保您没有耗尽存储空间。
4) 数据库表将很快被过期会话填满 Memcache 会自动丢弃旧的东西。当用户没有注销而只是放弃会话时,您必须在数据库中手动进行清理。通常,这最好通过每天的 cron 作业来完成。如果没有,您最终会得到大量陈旧记录,这会减慢对该表的查询速度。
哪个最适合您?我不知道。这取决于您的情况以及您愿意承担的风险类型。我从来没有遇到过 memcache 会话丢失的问题,但这实际上取决于您使用 memcache 的其他用途。如果您经常使用它,那么第二个仅用于会话的 memcache 实例可能是可行的方法。那么就没有丢弃它们的风险。