我正在使用负载均衡器后面的几个Web服务器,我可以启用Sticky Sessions将用户保存到一个特定的Web服务器 - 这将起作用。
我一直在阅读有关PHP Sessions和MemCache的内容。我必须说我读过的内容令人困惑,因为有些网页说它是个好主意,而其他网页则相反。
问题:
1:是的。我强烈建议在Memcached中存储PHP会话。原因如下:
Memcached非常适合存储数据库和文件系统经常访问的小块数据。
Memcached专为会话而设计。它最初是livejournal.com的首席开发人员的心血结晶,后来也用于缓存用户帖子的内容。好处很直接:大部分行动发生在记忆中。页面加载时间大大提高。
值得庆幸的是,PHP和Apache有一个简单的实现来处理与Memcached的会话。只需安装一些shell命令即可
debian的例子:
sudo apt-get -t stable install php5-memcached
和
将您的php.ini设置更改为类似于:
(取自http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/)
session.save_handler = memcache
; change server:port to fit your needs...
session.save_path="tcp://server:port?persistent=1&weight=1&
timeout=1&retry_interval=15"
关键是session.save_path
它将不再指向服务器上的相对文件路径。提到了APC-APC用于缓存程序使用的.php文件。 APC和Memcached将显着降低IO并使Apache免费提供更快的服务资源,如图像。
2:不
3:使用Memcached的根本缺点是数据易变性
会话数据在Memcached中不是持久的。因此,如果服务器崩溃,内存中的所有数据都将丢失。每个人都必须再次登录。
然后你有内存消耗......
请记住:会话存储在内存中。如果您的网站处理大量并发用户,您可能需要多花一点钱来进行更大的内存分配。
memcache扩展甚至带有一个会话处理程序,它只需很少的配置即可启动和运行。 http://php.net/manual/en/memcached.sessions.php
我真的不知道哪个更“好”。我觉得这将成为“依赖”的答案之一。这可能取决于您负载平衡的原因。如果少数用户每个都会造成大量负载,或者如果大量用户导致每个负载较小。
使用memcache进行会话存储可能有两个主要缺点。
首先,它是不稳定的。这意味着,如果您的某个memcached实例重新启动/崩溃等,则该实例中存储的任何会话都将丢失。如果他们使用传统的基于文件的会话,那么当服务器返回时它们仍将存在。
其次,可能更相关,memcached不保证持久性,它只是一个缓存。无论出于何种原因,都可以随时从memcached中清除数据。实际上,应该清除数据的唯一原因是缓存是否接近其大小限制。最近访问的数据将被驱逐出去。同样,这可能不是问题,因为如果用户的会话过时,用户可能已经离开,但这取决于您的需求。
如果你想使用“memcacheD”扩展而不是“memcache”(有两种不同的扩展)来进行会话控制,你应该注意修改php.ini。
来自Google的大多数网络资源都基于内存缓存,因为它的版本早于memcacheD。他们会说如下:
session.save_handler = memcache session.save_path =“tcp:// localhost:11211”
但是当涉及到memcacheD时它无效。
你应该像这样修改php.ini:
session.save_handler = memcached session.save_path =“localhost:11211”
没有协议标识符。
作为我的观点,不建议在Memcached中存储会话。如果会话消失,用户通常会被注销,如果缓存的一部分消失或由于硬件崩溃,它不应该引起用户明显的痛苦。根据memcached网站,“memcached是一个高性能的分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态Web应用程序。”因此,在开发应用程序时,请记住,您必须拥有一旦在Memcached服务器中找不到数据,则回退机制来检索数据。