mySQL和memcached用于PHP会话?

时间:2011-06-03 14:19:20

标签: php mysql session memcached

对于高流量网站,我们计划扩展为在HA设置中使用2个Web服务器。

我们需要解决的一个问题是PHP会话的管理。

显而易见的答案是将会话处理转移到数据库,这很简单,示例代码在互联网上广泛使用。

另一方面,我们知道memcached的好处,但是一旦memcached节点失败,该节点上的用户将失去会话。

因此,我们正在考虑实现一种设置,默认情况下会在memcached中处理会话,但也会在DB中编写。当我们得到一个memcached MISS时,我们会尝试从数据库中检索它。

以上是否有意义并且您是否知道有任何实施示例?

提前致谢

2 个答案:

答案 0 :(得分:6)

我向你推荐Dormando经常被引用的how to store sessions in MySQL with memcached caching解释。 original LiveJournal post更加冗长,但更彻底地解释了为什么只在memcached中存储会话是一个坏主意。

简而言之:

  • 首先从memcached读取会话数据,在缓存未命中时查看MySQL。
  • 在每次更新时将会话数据写入memcached。
  • 如果缓存数据尚未同步120秒左右,则只写入MySQL。
  • 运行一个定期脚本,检查MySQL是否有过期的会话。对于每个过期的会话,从memcached更新并仅使真正过期的会员到期。

答案 1 :(得分:1)

会话这是暂时的事情,如果每月一次memcache-server失败并截断会话,则无需担心。我确信你可以只使用memcache进行会话,而无需在DB中进行复制。

但是如果您仍想将会话转储到磁盘,那么作为现有解决方案,您可以使用Redis

  

Redis适用于内存数据集。   根据您的使用情况,您可以   通过倾销而坚持下去   数据集到磁盘

...

  

Redis还支持简单到设置的主从复制   先快速无阻塞   同步,自动重新连接   净拆分等等。