是否建议在MemCache中存储PHP会话?

问题描述 投票:50回答:4

我正在使用负载均衡器后面的几个Web服务器,我可以启用Sticky Sessions将用户保存到一个特定的Web服务器 - 这将起作用。

我一直在阅读有关PHP Sessions和MemCache的内容。我必须说我读过的内容令人困惑,因为有些网页说它是个好主意,而其他网页则相反。

问题:

  1. 是否可以在memcache中保持php会话?
  2. 在memcache上使用粘性会话更好吗?
  3. 在memcache中php会话有什么问题 - 注意:我可以获得足够的缓存(亚马逊因此可扩展)。
php memcached
4个回答
62
投票

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中不是持久的。因此,如果服务器崩溃,内存中的所有数据都将丢失。每个人都必须再次登录。

然后你有内存消耗......

请记住:会话存储在内存中。如果您的网站处理大量并发用户,您可能需要多花一点钱来进行更大的内存分配。


7
投票

1.是的,可以将PHP会话保存在memcached中。

memcache扩展甚至带有一个会话处理程序,它只需很少的配置即可启动和运行。 http://php.net/manual/en/memcached.sessions.php

2. Memcache / Sticky Sessions

我真的不知道哪个更“好”。我觉得这将成为“依赖”的答案之一。这可能取决于您负载平衡的原因。如果少数用户每个都会造成大量负载,或者如果大量用户导致每个负载较小。

3. Memcache的缺点

使用memcache进行会话存储可能有两个主要缺点。

首先,它是不稳定的。这意味着,如果您的某个memcached实例重新启动/崩溃等,则该实例中存储的任何会话都将丢失。如果他们使用传统的基于文件的会话,那么当服务器返回时它们仍将存在。

其次,可能更相关,memcached不保证持久性,它只是一个缓存。无论出于何种原因,都可以随时从memcached中清除数据。实际上,应该清除数据的唯一原因是缓存是否接近其大小限制。最近访问的数据将被驱逐出去。同样,这可能不是问题,因为如果用户的会话过时,用户可能已经离开,但这取决于您的需求。


4
投票

如果你想使用“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”

没有协议标识符。

来自:http://php.net/manual/en/memcached.sessions.php#99646


2
投票

作为我的观点,不建议在Memcached中存储会话。如果会话消失,用户通常会被注销,如果缓存的一部分消失或由于硬件崩溃,它不应该引起用户明显的痛苦。根据memcached网站,“memcached是一个高性能的分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态Web应用程序。”因此,在开发应用程序时,请记住,您必须拥有一旦在Memcached服务器中找不到数据,则回退机制来检索数据。

© www.soinside.com 2019 - 2024. All rights reserved.