如何在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 教程中的第三步。