如何在CentOSVPS上的Memcached中存储PHP会话

来自菜鸟教程
跳转至:导航、​搜索

关于 Memcached

Memcached 是一种内存键值存储,用于存储来自数据库调用、API 调用或页面渲染结果的任意数据(字符串、对象)的小块。

为什么在 Memcached 中存储会话?

Memcached 将会话存储在内存中而不是文件中。 因为内存比读取文件要快得多,所以您的网站会表现得更好并减少加载时间。

有什么问题?

会话将仅存储在内存中,当您的 VPS 关闭或重新启动时,内存无法保存数据,因此会话将在关闭时被删除。

设置

在开始本教程之前,请确保您已安装并运行 PHP 5,您可以在 PHP 帮助部分找到有关如何执行此操作的教程。

确保您已安装 EPEL 存储库,您需要 Memcached 的 EPEL 存储库,因为 Memcached 在基本存储库中不可用。

rpm -Uvh http://mirrors.kernel.org/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

将软件包更新到最新的可用版本不是必需的,但建议这样做。

yum update

安装 Memcached

让我们从安装 Memcached 开始。

yum install memcached

安装完 Memcached 后,用 VI 打开 Memcached 的配置文件。

vi /etc/sysconfig/memcached

你会看到这个:

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

Memcached 不受密码或用户名的保护,因此任何人都可以通过端口 11211 访问它。 我们不希望这样,因此我们将通过在 'OPTIONS=' 部分中插入一些选项来仅允许您的 VPS 访问它:

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1"

您可能想要更改缓存大小; 默认为 64MB。 一旦 Memcached 达到此限制,它将删除旧条目以释放内存以容纳新条目。 除非你有一个非常大的网站,否则 64MB 应该没问题。

让我们开始 Memcached。

/etc/init.d/memcached start

默认情况下,Memcached 不会在启动时启动,我们希望它在启动时启动。

chkconfig --levels 235 memcached on

安装 Memcached PHP 扩展

我们需要安装一些东西,让我们从开发工具开始。 这些是从源代码构建所必需的:

yum groupinstall "Development Tools"

之后,我们将安装更多的东西。 前两个是构建扩展所必需的,后两个是在 PHP 中运行/安装扩展所必需的。

yum install zlib-devel libmemcached-devel php-pear php-pecl-memcached

现在我们将使用我们刚刚安装的 PECL(PHP 扩展社区库)来安装 PHP Memcached 扩展。

pecl install -f memcached-1.0.0

将 PHP.ini 更改为将 Memcached 设置为会话处理程序

最后要做的是将 PHP 配置为使用 Memcached 作为会话处理程序。 为此,您必须使用 VI 打开 /etc/php.ini

vi /etc/php.ini

搜索如下所示的“[会话]”区域(从下到上滚动更容易)。

[Session]
; Handler used to store/retrieve data.
; http://www.php.net/manual/en/session.configuration.php#ini.session.save-handler
session.save_handler = files

并将其更改为:

[Session]
; Handler used to store/retrieve data.
; http://www.php.net/manual/en/session.configuration.php#ini.session.save-handler
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"

如您所见,我们已将 session_handler 更改为 memcached 以及 Memcached 运行的端口 11211 上的 localhost 的路径。 现在让我们重新启动 Apache 以重新加载 PHP.ini 文件。

service httpd restart

所有会话现在都存储在 Memcached 中,而不是文件中。

您可能会看到以下错误:

Starting httpd: httpd: apr_sockaddr_info_get() failed for memcached
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

您可以通过编辑 apache 配置来解决此问题:

vi /etc/httpd/conf/httpd.conf

并取消注释 ServerName 行:

ServerName localhost

Memcached 的更多内容

Memcached 是存储密集查询的理想选择,这些查询不需要在每个页面视图上都是实时的,而是以指定的时间增量(即 每 10 分钟一次)。 有关如何在脚本中使用 Memcached 的更多信息,我建议您查看 this 教程中的第三步。

提交人:蒂姆·科特坎普