专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » phpmemcache:为 PHP 应用提速、提速、再提速! 第 3 部分: 用 Memcache 守护程序把数据缓存Cache到内存中 »正文

phpmemcache:为 PHP 应用提速、提速、再提速! 第 3 部分: 用 Memcache 守护程序把数据缓存Cache到内存中

来源: 发布时间:星期一, 2009年1月12日 浏览:40次 评论:0
  本系列文章前两篇文章提供了为 PHP 应用提速技术第 1 部分 介绍了 XCache它是把 PHP 操作码缓存Cache到内存中 PHP 扩展XCache 将避免代价高昂且(严格来说)不必要花费来重新编译相同 PHP 代码去交付个页面XCache 是免费开源软件Software安装费时不多却可提供巨大回报第 2 部分 介绍了 XDebug它是配置 PHP 代码 PHP 扩展XDebug 是类似于软件Software x 光照片内容:它将深入应用揭露内部工作原理并且揭示代码如何度过其周期拥有了 XDebug 度量的后 —— 而不是的前 —— 您可以优化代码来调整算法、减少瓶颈并减轻过多内存使用

  注:XCache 适于生产使用在开发过程中使用 XDebug 最佳其计算负载在活动计算机中是十分浪费

  这让我们探究第 3种尤为有效性能增强原因名为 memcached Memcache 守护种高性能分布式对象缓存Cachememcached 安装位置介于应用和数据存储的间它将把对象保存在 RAM 中

  Memcache PHP 扩展将为访问缓存Cache提供个简单应用接口 (API)要使用缓存Cache需要 API 来确定先前是否已缓存Cache了对象如果已经缓存Cache只需检索该对象并继续进行处理否则转至数据库、获取必需数据、将其映射到对象中并把它添加到缓存Cache中在那里memcached 将最小化或消除针对您先前处理过信息数据库查询

  如果 XCache 和 XDebug 是涡轮增压器那么 memcached 就是喷气发动机请准备好点燃加力燃烧室

  更高速度需求

  通常PHP 应用中最耗费时间任务是数据检索实际上用于从存储库(文件或数据库服务器)中获取信息时间远高于编译并且甚至是执行 PHP 所需耗费时间连接至数据库服务器所需时间是次延迟等待查询完成添加附加停顿并且结果传输甚至会导致更多延迟此外如果代码使用对象则有指向对象导致负担过重映射平面行

  MySQL 可以使用其查询缓存Cache为查询阶段提速您还可以复制数据库(个主数据库多个副本)从而在多个 CPU 的间分担查询处理负担但是旦底层表改变MySQL 查询缓存Cache内容就会过时而且仅当个查询和先前查询相同时查询缓存Cache才会被命中副本也有限制例如无法分布数据库写操作

  从根本上说虽然查询缓存Cache和数据库副本都是有目并且在整体工作负载管理策略中占有地位(查询缓存Cache将消耗些内存但是在其他方面却很节省;副本将把灾难停机风险降至最低)但是连接和传输时间不变

  Memcache PHP 扩展将把对象缓存Cache到 RAM 中每次缓存Cache命中将替换到数据库服务器次往返使应用运行得更快您很可能会发现 memcached 也(间接地)提高了数据库服务器性能;由于 memcached 将用作替代持久性存储因此到达数据库服务器请求更少使数据库服务器可以更高效地响应已收到查询

  您可以在台或多台服务器上运行 memcached并且将在所有节点的间复制缓存Cache内容如果服务器出现故障客户机 API 软件Software将把缓存Cache读写操作重新路由到正常运行备用服务器上

  区别于 XCache您必须修改代码才能集成 memcached不过如果您已经小心地隔离了些对象思路方法内数据库访问代码则修改将很可能十分轻微且集中

  Danga Interactive 编写 Memcache 守护是由 Berkeley Software Distribution (BSD) License 自由条款许可免费开源软件Software守护应当可以轻松地构建在 UNIX® 和 Linux® 系统上也可以构建在 Mac OS X 和 Microsoft® Windows® 上很多 Linux 发行版都提供了 memcached 包;请查看包存储库如果使用 Mac OS X 或 Windows 并且更喜欢便捷预构建 2进制则可以通过简单 Google 搜索在 Web 上找到此类软件Software

  (重新)构建 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 2进制和 XAMPP 开发文件(构建附加组件必备文件)您还可以使用 wget 快速获取软件Software:

$ 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 为结尾)包含 2进制;后个 tarball 包含针对 XAMPP 系统构建代码所需题头文件

  虽然可以把 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/  /  licenses/  phpmyadmin/  var/


  接下来下载并解压缩 XAMPP 附带 PHP 版本源代码(XAMPP V1.6 绑定了 PHP V4.4.6);从 PHP.net 下载 PHP V4.4.6 代码wget 将再次使您可以轻而易举地完成任务:

$ wget http://us2.php.net/get/php-4.4.6.tar.bz2/from/www.php.net/mirror
$ tar xjf php-4.4.6.tar.bz2
$ cd php-4.4.6


  接下来修改 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您可能需要安装附加软件Software包才能准备好进行这些构建这取决于 Linux 发行版和 PHP 配置内容)

  清单 2. 用于重新构建 PHP 修改后 XAMPP 脚本

(
  cd /opt/lampp/bin
  rm phpize phpextdist php-config php
  rm -rf /opt/lampp//php
)
make distclean
export PATH="/opt/lampp/bin:$PATH"
export CFLAGS="-O6 -I/opt/lampp//libpng
  -I/opt/lampp//ncurses
  -I/opt/lampp/ -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-ex
  --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-tf-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-s
  --enable-mb=all
  --with-curl=/opt/lampp
  --enable-mbregex
  --enable-zend-multi
  --enable-ex
  --enable-pcntl
  --with-mime-magic
  --with-iconv
make
sudo make
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

  把浏览器指向 http://localhost然后您应当会看到类似于图 1 内容

  图 1. XAMPP for Linux 页面:检验 XAMPP 和 PHP 是否已成功安装

  pr( 'Object retrieved from cache' . "n");
  pr $_datum->get( 'description' ) . "n";
}
pr_r( $_cache->getExtendedStats );
$_cache->close;
?>

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: