名为 memcached 的 Memcache 守护程序是一种高性能的分布式对象缓存。memcached 的安装位置介于应用程序与数据存储之间,它将把对象保存在 RAM 中。
Memcache PHP 扩展将为访问缓存提供一个简单的应用程序接口 (API)。要使用缓存,需要调用 API 来确定先前是否已缓存了对象。如果已经缓存,只需检索该对象并继续进行处理。否则,转至数据库、获取必需的数据、将其映射到对象中并把它添加到缓存中。在那里,memcached 将最小化或消除针对您先前处理过的信息的数据库查询。
如果 XCache 和 XDebug 是涡轮增压器,那么 memcached 就是喷气发动机。请准备好点燃加力燃烧室。
更高的速度需求
通常,PHP 应用程序中最耗费时间的任务是数据检索。实际上,用于从存储库(文件或数据库服务器)中获取信息的时间远高于编译并且甚至是执行 PHP 程序所需耗费的时间。连接至数据库服务器所需的时间是一次延迟,等待查询完成添加附加停顿,并且结果的传输甚至会导致更多延迟。此外,如果代码使用对象,则有指向对象的导致负担过重的映射平面行。
MySQL 可以使用其查询缓存为查询阶段提速。您还可以复制数据库(一个主数据库,多个副本),从而在多个 CPU 之间分担查询处理的负担。但是,一旦底层表改变,MySQL 查询缓存的内容就会过时。而且,仅当一个查询与先前查询相同时,查询缓存才会被命中。副本也有限制。例如,无法分布数据库写操作。
从根本上说,虽然查询缓存和数据库副本都是有目的的并且在整体工作负载管理策略中占有地位(查询缓存将消耗一些内存,但是在其他方面却很节省;副本将把灾难停机的风险降至最低),但是连接和传输时间不变。
Memcache PHP 扩展将把对象缓存到 RAM 中。每次缓存命中将替换到数据库服务器的一次往返,使应用程序运行得更快。您很可能会发现 memcached 也(间接地)提高了数据库服务器的性能;由于 memcached 将用作替代持久性存储,因此到达数据库服务器的请求更少,使数据库服务器可以更高效地响应已收到的查询。
您可以在一台或多台服务器上运行 memcached,并且将在所有节点之间复制缓存的内容。如果服务器出现故障,客户机 API 软件将把缓存读写操作重新路由到正常运行的备用服务器上。
不同于 XCache,您必须修改代码才能集成 memcached。不过,如果您已经小心地隔离了一些对象方法内的数据库访问代码,则修改将很可能十分轻微且集中。
Danga Interactive 编写的 Memcache 守护程序是由 Berkeley Software Distribution (BSD) License 的自由条款许可的免费开源软件。守护程序应当可以轻松地构建在 UNIX? 和 Linux? 系统上,也可以构建在 Mac OS X 和 Microsoft? Windows? 上。很多 Linux 发行版都提供了 memcached 包;请查看包存储库。如果使用 Mac OS X 或 Windows 并且更喜欢便捷的预构建二进制,则可以通过简单的 Google 搜索在 Web 上找到此类软件。
Memcache PHP 扩展将为访问缓存提供一个简单的应用程序接口 (API)。要使用缓存,需要调用 API 来确定先前是否已缓存了对象。如果已经缓存,只需检索该对象并继续进行处理。否则,转至数据库、获取必需的数据、将其映射到对象中并把它添加到缓存中。在那里,memcached 将最小化或消除针对您先前处理过的信息的数据库查询。
如果 XCache 和 XDebug 是涡轮增压器,那么 memcached 就是喷气发动机。请准备好点燃加力燃烧室。
更高的速度需求
通常,PHP 应用程序中最耗费时间的任务是数据检索。实际上,用于从存储库(文件或数据库服务器)中获取信息的时间远高于编译并且甚至是执行 PHP 程序所需耗费的时间。连接至数据库服务器所需的时间是一次延迟,等待查询完成添加附加停顿,并且结果的传输甚至会导致更多延迟。此外,如果代码使用对象,则有指向对象的导致负担过重的映射平面行。
MySQL 可以使用其查询缓存为查询阶段提速。您还可以复制数据库(一个主数据库,多个副本),从而在多个 CPU 之间分担查询处理的负担。但是,一旦底层表改变,MySQL 查询缓存的内容就会过时。而且,仅当一个查询与先前查询相同时,查询缓存才会被命中。副本也有限制。例如,无法分布数据库写操作。
从根本上说,虽然查询缓存和数据库副本都是有目的的并且在整体工作负载管理策略中占有地位(查询缓存将消耗一些内存,但是在其他方面却很节省;副本将把灾难停机的风险降至最低),但是连接和传输时间不变。
Memcache PHP 扩展将把对象缓存到 RAM 中。每次缓存命中将替换到数据库服务器的一次往返,使应用程序运行得更快。您很可能会发现 memcached 也(间接地)提高了数据库服务器的性能;由于 memcached 将用作替代持久性存储,因此到达数据库服务器的请求更少,使数据库服务器可以更高效地响应已收到的查询。
您可以在一台或多台服务器上运行 memcached,并且将在所有节点之间复制缓存的内容。如果服务器出现故障,客户机 API 软件将把缓存读写操作重新路由到正常运行的备用服务器上。
不同于 XCache,您必须修改代码才能集成 memcached。不过,如果您已经小心地隔离了一些对象方法内的数据库访问代码,则修改将很可能十分轻微且集中。
Danga Interactive 编写的 Memcache 守护程序是由 Berkeley Software Distribution (BSD) License 的自由条款许可的免费开源软件。守护程序应当可以轻松地构建在 UNIX? 和 Linux? 系统上,也可以构建在 Mac OS X 和 Microsoft? Windows? 上。很多 Linux 发行版都提供了 memcached 包;请查看包存储库。如果使用 Mac OS X 或 Windows 并且更喜欢便捷的预构建二进制,则可以通过简单的 Google 搜索在 Web 上找到此类软件。
(重新)构建 PHP
让我们在 Debian Linux 上构建、安装和部署 memcached。要加速执行过程并允许您独立于现有 Web 服务器基础设施来测试 memcached,请使用 XAMPP Apache 发行版作为构建的基础。XAMPP 十分易于安装并且包含 Apache V2、MySQL、PHP V4 和 V5、Perl、许多库和许多 Web 应用程序(例如 phpMyAdmin)。如果从未从头开始构建 Linux、Apache、MySQL 和 PHP (LAMP) 堆栈,或者如果需要避免与此类努力相关联的争辩,则以 XAMPP 开始是十分理想的。
注:如果您以前通过源代码构建了 PHP 并保留了文件,则只需把 --enables-memcache 选项添加到配置开关列表中,并且跳过构建 memcached 和 PHP Memcache 扩展以前所示的步骤。
要构建和部署 memcached,您需要 XAMPP 发行版,包括 XAMPP 开发文件、XAMPP 附带的 PHP 版本的源代码以及 memcached 的源代码和 Memcache 的 PHP 扩展。您可以从 XAMPP 下载 XAMPP 二进制和 XAMPP 开发文件(构建附加组件的必备文件)。您还可以使用 wget 快速获取软件:
让我们在 Debian Linux 上构建、安装和部署 memcached。要加速执行过程并允许您独立于现有 Web 服务器基础设施来测试 memcached,请使用 XAMPP Apache 发行版作为构建的基础。XAMPP 十分易于安装并且包含 Apache V2、MySQL、PHP V4 和 V5、Perl、许多库和许多 Web 应用程序(例如 phpMyAdmin)。如果从未从头开始构建 Linux、Apache、MySQL 和 PHP (LAMP) 堆栈,或者如果需要避免与此类努力相关联的争辩,则以 XAMPP 开始是十分理想的。
注:如果您以前通过源代码构建了 PHP 并保留了文件,则只需把 --enables-memcache 选项添加到配置开关列表中,并且跳过构建 memcached 和 PHP Memcache 扩展以前所示的步骤。
要构建和部署 memcached,您需要 XAMPP 发行版,包括 XAMPP 开发文件、XAMPP 附带的 PHP 版本的源代码以及 memcached 的源代码和 Memcache 的 PHP 扩展。您可以从 XAMPP 下载 XAMPP 二进制和 XAMPP 开发文件(构建附加组件的必备文件)。您还可以使用 wget 快速获取软件:
$ wget 'http://www.apachefriends.org/download.php?xampp-linux-1.6.tar.gz'
$ wget 'http://www.apachefriends.org/download.php?xampp-linux-devel-1.6.tar.gz'
前一个 tarball(tarball 是压缩的 .tar 文件并且通常以后缀 .tar.gz 为结尾)包含二进制;后一个 tarball 包含针对 XAMPP 系统构建代码所需的题头文件。
虽然可以把 XAMPP 锚定在文件系统中的任意位置,但是请把压缩包安装到 /opt 中。同时把开发文件安装到 /opt 中。使用 /opt 将使剩下的构建过程变得更轻松。对 tar 使用 -C 选项把文件直接解压缩到 /opt 中,如下所示:
清单 1. 把文件直接解压缩到 /opt 中
虽然可以把 XAMPP 锚定在文件系统中的任意位置,但是请把压缩包安装到 /opt 中。同时把开发文件安装到 /opt 中。使用 /opt 将使剩下的构建过程变得更轻松。对 tar 使用 -C 选项把文件直接解压缩到 /opt 中,如下所示:
清单 1. 把文件直接解压缩到 /opt 中
$ sudo mkdir /opt
$ tar xzf xampp-linux-1.6.tar.gz -C /opt
$ tar xzf xampp-linux-devel-1.6.tar.gz -C /opt
$ ls -CF /opt/lampp
RELEASENOTES error/ info/ logs/ phpsqliteadmin/
backup/ etc/ lampp* man/ sbin/
bin/ htdocs/ lib/ manual/ share/
build/ icons/ libexec/ modules/ tmp/
cgi-bin/ include/ licenses/ phpmyadmin/ var/
接下来,下载并解压缩 XAMPP 附带的 PHP 版本的源代码(XAMPP V1.6 绑定了 PHP V4.4.6);从 PHP.net 下载 PHP V4.4.6 的代码。wget 将再次使您可以轻而易举地完成任务:
接下来,修改 XAMPP 的 PHP 构建脚本重新构建 PHP 以启用 Memcache。您可以在 /opt/lampp/share/lampp/configures.tar.gz 中找到原始构建脚本(和其他构建脚本)。使用以下代码解压缩 PHP V4 构建脚本:
接下来,修改 XAMPP 的 PHP 构建脚本重新构建 PHP 以启用 Memcache。您可以在 /opt/lampp/share/lampp/configures.tar.gz 中找到原始构建脚本(和其他构建脚本)。使用以下代码解压缩 PHP V4 构建脚本:
$ tar xzfv /opt/lampp/share/lampp/configures.tar.gz \
php/configure-php4-oswald
打开 configure-php4-oswald 并添加 --enable-memcache(如果系统没有那些数据库,您还可能发现有必要删除选项,例如特定于 Oracle 和 PostgreSQL 的那些选项)。清单 2 展示了在测试系统上用于重新构建 PHP 的修改后的脚本。(PHP 构建过程依赖于许多实用程序和开发库,例如 Flex、Bison、libxml 和 PCRE。您可能需要安装附加软件包才能准备好进行这些构建,这取决于 Linux 发行版和 PHP 配置的内容)。
清单 2. 用于重新构建 PHP 的修改后的 XAMPP 脚本
清单 2. 用于重新构建 PHP 的修改后的 XAMPP 脚本
(
cd /opt/lampp/bin
rm phpize phpextdist php-config php
rm -rf /opt/lampp/include/php
)
make distclean
export PATH="/opt/lampp/bin:$PATH"
export CFLAGS="-O6 -I/opt/lampp/include/libpng \
-I/opt/lampp/include/ncurses \
-I/opt/lampp/include -L/opt/lampp/lib"
./configure \
--prefix=/opt/lampp \
--with-apxs2=/opt/lampp/bin/apxs \
--with-config-file-path=/opt/lampp/etc \
--with-mysql=/opt/lampp \
--enable-inline-optimation \
--disable-debug \
--enable-memcache \
--enable-bcmath \
--enable-calendar \
--enable-ctype \
--enable-dbase \
--enable-discard-path \
--enable-exif \
--enable-filepro \
--enable-force-cgi-redirect \
--enable-ftp \
--enable-gd-imgstrttf \
--enable-gd-native-ttf \
--with-ttf \
--enable-magic-quotes \
--enable-memory-limit \
--enable-shmop \
--enable-sigchild \
--enable-sysvsem \
--enable-sysvshm \
--enable-track-vars \
--enable-trans-sid \
--enable-wddx \
--enable-yp \
--with-ftp \
--with-gdbm=/opt/lampp \
--with-jpeg-dir=/opt/lampp \
--with-png-dir=/opt/lampp \
--with-tiff-dir=/opt/lampp \
--with-freetype-dir=/opt/lampp \
--without-xpm \
--with-zlib=yes \
--with-zlib-dir=/opt/lampp \
--with-openssl=/opt/lampp \
--with-expat-dir=/opt/lampp \
--enable-xslt \
--with-xslt-sablot=/opt/lampp \
--with-dom=/opt/lampp \
--with-ldap=/opt/lampp \
--with-ncurses=/opt/lampp \
--with-gd \
--with-imap-dir=/opt/lampp \
--with-imap-ssl \
--with-imap=/opt/lampp \
--with-gettext=/opt/lampp \
--with-mssql=/opt/lampp \
--with-mysql-sock=/opt/lampp/var/mysql/mysql.sock \
--with-mcrypt=/opt/lampp \
--with-mhash=/opt/lampp \
--enable-sockets \
--enable-mbstring=all \
--with-curl=/opt/lampp \
--enable-mbregex \
--enable-zend-multibyte \
--enable-exif \
--enable-pcntl \
--with-mime-magic \
--with-iconv
make
sudo make install
exit 1
在脚本的末尾,您的 XAMPP 安装将有一个新的独立运行的能够使用 memcache 的 PHP V4 副本。如果需要测试构建,请停止所有正在运行的 Apache 和 MySQL 副本,包括在 XAMPP 外部的那些副本,并且运行以下命令:
$ sudo /opt/lampp/lampp start
这将启动 XAMPP 版本的 Apache 和 MySQL,包括新的 PHP V4 模块。如果需要使 Apache 生产服务器的运行不受干扰,则可以编辑文件 /opt/lampp/etc/httpd.conf 并把 Listen 端口参数改为 8080(或其他可用端口)。然后您可以用以下命令单独启动 XAMPP 的 Apache 服务器:
sudo /opt/lampp/bin/apachectl start
图 1. XAMPP for Linux 初始页面:检验 XAMPP 和 PHP 是否已成功安装