如何使用相同域的memcached在多个服务器之间共享php会话

时间:2015-04-20 15:01:00

标签: php session memcached load-balancing

我有三个单域服务器

我使用nginx作为负载均衡器。

我想在这些服务器上共享php会话。

我的应用程序严重依赖会话。在文件中存储会话是个坏主意。我正在使用memcached。

我应该如何准确有效地配置memcached来快速读取和写入会话以及在服务器之间共享。

或任何其他好的替代建议。

1 个答案:

答案 0 :(得分:3)

当我读到你的问题时,看起来就像你在每台服务器上安装Memcache一样(那就是你问“服务器之间共享”的原因?)。

我要做的是拥有一个服务器,您上有Memcached。每个Web服务器都将连接到您的Memcache实例。如果需要,您还可以拥有一个Memcache服务器池,Memcache将负责正确地分发您的数据和会话。

首先,您可能希望更改PHP中的会话处理方式(对于每个服务器),以便在Memcache中读取会话的数据。你的 php.ini 文件需要这个:

[Session]
; Handler used to store/retrieve data.
session.save_handler = memcache[d] ; memcache or memcached
session.save_path = "127.0.0.1:11211"

了解Session Handlers的工作原理。请注意,您可以使用 memcache memcached 扩展程序。它们不一样。

以下是两个扩展程序的文档:

如果您想了解有关正确的内存缓存的更多详细信息,我建议您检查一下: https://serverfault.com/questions/63383/memcache-vs-memcached

请注意,在Memcache中存储会话可能会有问题。如果Memcache被停止(无论出于何种原因),您将丢失其中的所有数据。您可能需要考虑将会话存储在数据库中,并将它们放在Memcache中以加快该过程。

您可以构建自定义会话处理程序来确保它符合您的需求。您可以阅读有关The SessionHandler class的更多信息。

最后,如果您愿意接受建议,我也会考虑使用Redis而不是Memcache,因为它提供了更多功能,并且可以在正确关闭时重新加载数据。