本系列文章的前兩篇文章提供了為 PHP 應(yīng)用程序提速的技術(shù)。第 1 部分 介紹了 XCache,它是把 PHP 操作碼緩存到內(nèi)存中的 PHP 擴(kuò)展。XCache 將避免代價高昂且(嚴(yán)格來說)不必要的花費來重新編譯相同的 PHP 代碼去交付一個頁面。XCache 是免費的開源軟件,安裝費時不多卻可提供巨大回報。第 2 部分介紹了 XDebug,它是配置 PHP 代碼的 PHP 擴(kuò)展。XDebug 是類似于軟件 x光照片的內(nèi)容:它將深入應(yīng)用程序,揭露內(nèi)部工作原理,并且揭示代碼如何度過其周期。擁有了 XDebug 度量之后 —— 而不是之前 ——您可以優(yōu)化代碼來調(diào)整算法、減少瓶頸并減輕過多的內(nèi)存使用。 注:XCache 適于生產(chǎn)使用。在開發(fā)過程中使用 XDebug 最佳,因為其計算負(fù)載在活動計算機(jī)中是十分浪費的。 這一次,讓我們探究第三種尤為有效的性能增強(qiáng)因素。名為 memcached 的 Memcache 守護(hù)程序是一種高性能的分布式對象緩存。memcached 的安裝位置介于應(yīng)用程序與數(shù)據(jù)存儲之間,它將把對象保存在 RAM 中。 Memcache PHP 擴(kuò)展將為訪問緩存提供一個簡單的應(yīng)用程序接口 (API)。要使用緩存,需要調(diào)用 API來確定先前是否已緩存了對象。如果已經(jīng)緩存,只需檢索該對象并繼續(xù)進(jìn)行處理。否則,轉(zhuǎn)至數(shù)據(jù)庫、獲取必需的數(shù)據(jù)、將其映射到對象中并把它添加到緩存中。在 那里,memcached 將最小化或消除針對您先前處理過的信息的數(shù)據(jù)庫查詢。 如果 XCache 和 XDebug 是渦輪增壓器,那么 memcached 就是噴氣發(fā)動機(jī)。請準(zhǔn)備好點燃加力燃燒室。 更高的速度需求 通 常,PHP 應(yīng)用程序中最耗費時間的任務(wù)是數(shù)據(jù)檢索。實際上,用于從存儲庫(文件或數(shù)據(jù)庫服務(wù)器)中獲取信息的時間遠(yuǎn)高于編譯并且甚至是執(zhí)行 PHP程序所需耗費的時間。連接至數(shù)據(jù)庫服務(wù)器所需的時間是一次延遲,等待查詢完成添加附加停頓,并且結(jié)果的傳輸甚至?xí)?dǎo)致更多延遲。此外,如果代碼使用對象, 則有指向?qū)ο蟮膶?dǎo)致負(fù)擔(dān)過重的映射平面行。 MySQL可以使用其查詢緩存為查詢階段提速。您還可以復(fù)制數(shù)據(jù)庫(一個主數(shù)據(jù)庫,多個副本),從而在多個 CPU之間分擔(dān)查詢處理的負(fù)擔(dān)。但是,一旦底層表改變,MySQL查詢緩存的內(nèi)容就會過時。而且,僅當(dāng)一個查詢與先前查詢相同時,查詢緩存才會被命中。副本也有限制。例如,無法分布數(shù)據(jù)庫寫操作。 從根本上說,雖然查詢緩存和數(shù)據(jù)庫副本都是有目的的并且在整體工作負(fù)載管理策略中占有地位(查詢緩存將消耗一些內(nèi)存,但是在其他方面卻很節(jié)??;副本將把災(zāi)難停機(jī)的風(fēng)險降至最低),但是連接和傳輸時間不變。 Memcache PHP 擴(kuò)展將把對象緩存到 RAM 中。每次緩存命中將替換到數(shù)據(jù)庫服務(wù)器的一次往返,使應(yīng)用程序運行得更快。您很可能會發(fā)現(xiàn) memcached也(間接地)提高了數(shù)據(jù)庫服務(wù)器的性能;由于 memcached將用作替代持久性存儲,因此到達(dá)數(shù)據(jù)庫服務(wù)器的請求更少,使數(shù)據(jù)庫服務(wù)器可以更高效地響應(yīng)已收到的查詢。 您可以在一臺或多臺服務(wù)器上運行 memcached,并且將在所有節(jié)點之間復(fù)制緩存的內(nèi)容。如果服務(wù)器出現(xiàn)故障,客戶機(jī) API 軟件將把緩存讀寫操作重新路由到正常運行的備用服務(wù)器上。 不同于 XCache,您必須修改代碼才能集成 memcached。不過,如果您已經(jīng)小心地隔離了一些對象方法內(nèi)的數(shù)據(jù)庫訪問代碼,則修改將很可能十分輕微且集中。 Danga Interactive 編寫的 Memcache 守護(hù)程序是由 Berkeley Software Distribution (BSD) License 的自由條款許可的免費開源軟件。守護(hù)程序應(yīng)當(dāng)可以輕松地構(gòu)建在 UNIX? 和 Linux? 系統(tǒng)上,也可以構(gòu)建在 Mac OS X 和 Microsoft? Windows? 上。很多 Linux 發(fā)行版都提供了 memcached 包;請查看包存儲庫。如果使用 Mac OS X 或 Windows 并且更喜歡便捷的預(yù)構(gòu)建二進(jìn)制,則可以通過簡單的 Google 搜索在 Web 上找到此類軟件。
(重新)構(gòu)建 PHP 讓 我們在 Debian Linux 上構(gòu)建、安裝和部署 memcached。要加速執(zhí)行過程并允許您獨立于現(xiàn)有 Web 服務(wù)器基礎(chǔ)設(shè)施來測試memcached,請使用 XAMPP Apache 發(fā)行版作為構(gòu)建的基礎(chǔ)。XAMPP 十分易于安裝并且包含 Apache V2、MySQL、PHP V4 和 V5、Perl、許多庫和許多 Web 應(yīng)用程序(例如 phpMyAdmin)。如果從未從頭開始構(gòu)建Linux、Apache、MySQL 和 PHP (LAMP) 堆棧,或者如果需要避免與此類努力相關(guān)聯(lián)的爭辯,則以 XAMPP開始是十分理想的。 注:如果您以前通過源代碼構(gòu)建了 PHP 并保留了文件,則只需把 --enables-memcache 選項添加到配置開關(guān)列表中,并且跳過構(gòu)建 memcached 和 PHP Memcache 擴(kuò)展以前所示的步驟。 要構(gòu)建和部署 memcached,您需要 XAMPP 發(fā)行版,包括 XAMPP 開發(fā)文件、XAMPP 附帶的 PHP 版本的源代碼以及 memcached 的源代碼和 Memcache 的 PHP 擴(kuò)展。您可以從 XAMPP 下載 XAMPP 二進(jìn)制和 XAMPP 開發(fā)文件(構(gòu)建附加組件的必備文件)。您還可以使用 wget 快速獲取軟件: $ wget ‘http://www./download.php?xampp-linux-1.6.tar.gz‘ $ wget ‘http://www./download.php?xampp-linux-devel-1.6.tar.gz‘
|
前一個 tarball(tarball 是壓縮的 .tar 文件并且通常以后綴 .tar.gz 為結(jié)尾)包含二進(jìn)制;后一個 tarball 包含針對 XAMPP 系統(tǒng)構(gòu)建代碼所需的題頭文件。 雖然可以把 XAMPP 錨定在文件系統(tǒng)中的任意位置,但是請把壓縮包安裝到 /opt 中。同時把開發(fā)文件安裝到 /opt 中。使用 /opt 將使剩下的構(gòu)建過程變得更輕松。對 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 將再次使您可以輕而易舉地完成任務(wù): $ wget http://us2./get/php-4.4.6.tar.bz2/from/www./mirror $ tar xjf php-4.4.6.tar.bz2 $ cd php-4.4.6
|
接下來,修改 XAMPP 的 PHP構(gòu)建腳本重新構(gòu)建 PHP 以啟用 Memcache。您可以在 /opt/lampp/share/lampp/configures.tar.gz中找到原始構(gòu)建腳本(和其他構(gòu)建腳本)。使用以下代碼解壓縮 PHP V4 構(gòu)建腳本: $ tar xzfv /opt/lampp/share/lampp/configures.tar.gz \ php/configure-php4-oswald
|
打開 configure-php4-oswald 并添加 --enable-memcache (如 果系統(tǒng)沒有那些數(shù)據(jù)庫,您還可能發(fā)現(xiàn)有必要刪除選項,例如特定于 Oracle 和 PostgreSQL 的那些選項)。清單 2展示了在測試系統(tǒng)上用于重新構(gòu)建 PHP 的修改后的腳本。(PHP 構(gòu)建過程依賴于許多實用程序和開發(fā)庫,例如 Flex、Bison、libxml和 PCRE。您可能需要安裝附加軟件包才能準(zhǔn)備好進(jìn)行這些構(gòu)建,這取決于 Linux 發(fā)行版和 PHP 配置的內(nèi)容)。 清單 2. 用于重新構(gòu)建 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 副本。如果需要測試構(gòu)建,請停止所有正在運行的 Apache 和 MySQL 副本,包括在 XAMPP 外部的那些副本,并且運行以下命令: $ sudo /opt/lampp/lampp start
|
這將啟動 XAMPP 版本的 Apache 和 MySQL,包括新的 PHP V4 模塊。如果需要使 Apache 生產(chǎn)服務(wù)器的運行不受干擾,則可以編輯文件 /opt/lampp/etc/httpd.conf 并把 Listen 端口參數(shù)改為 8080 (或其他可用端口)。然后您可以用以下命令單獨啟動 XAMPP 的 Apache 服務(wù)器: sudo /opt/lampp/bin/apachectl start
|
把瀏覽器指向 http://localhost,然后您應(yīng)當(dāng)會看到類似于圖 1 的內(nèi)容。 圖 1. XAMPP for Linux 初始頁面:檢驗 XAMPP 和 PHP 是否已成功安裝
要檢驗?zāi)?PHP 構(gòu)建是否已安裝,請單擊左側(cè)的 phpinfo() 鏈接。您應(yīng)當(dāng)會看到類似圖 2 中所示的統(tǒng)計信息。PHP 的版本應(yīng)當(dāng)是 4.4.6,構(gòu)建選項應(yīng)當(dāng)包括 --enable-memcache ,并且 php.ini 的工作版本應(yīng)當(dāng)駐留在 /opt/lampp/lib 中。 圖 2. 檢驗 PHP 的自定義構(gòu)建是否替換了 XAMPP 附帶的 PHP 構(gòu)建
構(gòu)建 PHP Memcache 擴(kuò)展 新的 PHP 就緒后,下一步是構(gòu)建和安裝 PHP Memcache 擴(kuò)展。該擴(kuò)展將提供訪問 Memcache 守護(hù)程序的服務(wù)所需的 API。 首先將檢索 Memcache 擴(kuò)展的源代碼。您可以再次使用 wget 來獲得源代碼,請使用以下命令: $ wget http://pecl./get/memcache-2.1.0.tgz
|
構(gòu)建 Memcache 擴(kuò)展的過程與構(gòu)建其他 PHP 擴(kuò)展的過程完全相同: - 切換到源代碼的目錄
- 運行
phpize ,后接 ./configure 、make 和 make install 。 - 確保使用新版本的
phpize 。 - 把 /opt/lampp/bin 放到 shell 的 PATH 中,位于包含其他版本的
phpize 的所有目錄之前:
$ cd memcache-2.1.0 $ export PATH=/opt/lampp/bin:$PATH $ phpize $ ./configure $ make ... $ sudo make install Installing shared extensions: /opt/lampp/lib/php/extensions/no-debug-non-zts-20020429/
|
構(gòu)建將把一個名為 memcache.so 的新文件放入擴(kuò)展目錄。要加載并應(yīng)用擴(kuò)展,您必須編輯 php.ini。打開 XAMPP PHP 配置文件 /opt/lampp/etc/php.ini 并添加清單 3 中的代碼行。 清單 3. 編輯 php.ini
extension=memcache.so memcache.allow_failover = 1 memcache.max_failover_attempts=20 memcache.chunk_size =8192 memcache.default_port = 11211
|
第 1 行將加載 Memcache 擴(kuò)展。其他四行是用于控制擴(kuò)展的參數(shù)。按順序,從頂部到底部: memcache.allow_failover - 一個布爾值,用于控制當(dāng)連接出錯時 Memcache 擴(kuò)展是否故障轉(zhuǎn)移到其他服務(wù)器上。默認(rèn)值為
1 (true)。
memcache.max_failover_attempts - 一個整型值,用于限制連接到持久性數(shù)據(jù)或檢索數(shù)據(jù)的服務(wù)器數(shù)目。如果
memcache.allow_failover 為 false,則將忽略此參數(shù)。默認(rèn)值為 20 。
memcache.chunk_size - 一個整型值,用于控制數(shù)據(jù)傳輸?shù)拇笮?。默認(rèn)值為
8192 字節(jié) (8 KB),但是如果設(shè)置為 32768 (32 KB),則可以獲得更好的性能。
memcache.default_port - 另一個整型值,用于設(shè)置連接到 Memcache 所使用的 TCP 端口。除非您修改它,否則默認(rèn)值為無特權(quán)的高端口
11211 。
要確定構(gòu)建現(xiàn)在是否能夠完全運行,請使用以下命令重新啟動 XAMPP Apache Web 服務(wù)器: $ sudo /opt/lampp/bin/apachectl restart
|
如果重新訪問 XAMPP phpinfo() 頁面,您應(yīng)當(dāng)會看到類似圖 3 中的 Memcache 部分。 圖 3. 通過 phpinfo() 查看 Memcache 設(shè)置
構(gòu)建 Memcache 守護(hù)程序 此過程(表面上有些冗長)還有一個額外的步驟:構(gòu)建和部署為數(shù)據(jù)管理 RAM 緩存的 Memcache 守護(hù)程序。守護(hù)程序依賴于 libevent,因此必須構(gòu)建和部署該庫,然后再編譯 memcached: $ wget http://www./~provos/libevent-1.3b.tar.gz $ wget http://www./memcached/dist/memcached-1.2.1.tar.gz
|
接下來,解壓縮 tarball 來為每個包生成一個目錄: $ tar xzf memcached-1.2.1.tar.gz $ tar xzf libevent-1.3b.tar.gz
|
要繼續(xù)執(zhí)行操作,請依次構(gòu)建每個包,從庫開始。要使所有文件包含在 /opt 中,請在運行配置時使用 --prefix 選項。下面的指令將構(gòu)建和安裝 libevent。 清單 4. 編輯 php.ini
$ cd ../libevent-1.3b $ ./configure --prefix=/opt/lampp ... $ make $ sudo make install ... /usr/bin/install -c .libs/libevent.lai /opt/lampp/lib/libevent.la /usr/bin/install -c .libs/libevent.a /opt/lampp/lib/libevent.a chmod 644 /opt/lampp/lib/libevent.a ranlib /opt/lampp/lib/libevent.a PATH="$PATH:/sbin" ldconfig -n /opt/lampp/lib ---------------------------------------------------------------------- Libraries have been installed in: /opt/lampp/lib
|
接下來的命令將構(gòu)建和安裝 memcached 二進(jìn)制。 清單 5. 編輯 php.ini
$ cd ../memcached-1.2.1 $ ./configure --prefix=/opt/lampp ... $ make $ sudo make install ... /usr/bin/install -c memcached /opt/lampp/bin/memcached /usr/bin/install -c memcached-debug /opt/lampp/bin/memcached-debug
|
啟動 memcached 十分簡單: ./memcached -d -m 2048 -l ip-address -p 11211
|
-d 選項將把 memcached 作為一個守護(hù)程序而不是在最顯著的位置中運行。-m number 將把 number 兆字節(jié)分配給此過程實例。(在某些系統(tǒng)中,可能會要求您運行多個 memcached 實例以訪問可用于進(jìn)行緩存的所有內(nèi)存。有關(guān)更多信息,請參閱 Memcache 文檔)。-l ip-address -p 11211 將使守護(hù)程序分別偵聽 IP 地址 ip-address 和端口 11211 。替換您的 IP 地址。如果為 memcached 選擇其他端口,請確保 php.ini 將反映該端口。
緩存數(shù)據(jù) 安裝后,就可以讓 Memcache 運行了。 Memcache 通常用于存儲對象,但是它可以存儲可序列化的任何 PHP 變量,例如字符串。Memcache 有一個面向過程和一個面向?qū)ο蟮?API。不管您使用哪一個變量,您必須提供四個實參才能把變量存儲到緩存中: - 惟一關(guān)鍵字
- 關(guān)鍵字用于從緩存中檢索相關(guān)數(shù)據(jù)。如果每條記錄都有一個惟一 ID,則可能足以作為緩存關(guān)鍵字,但是您可以策劃其他模式來滿足需求。
- 要緩存的變量
- 變量可以是任意類型,只要它可以被序列化為持久的變量并且可以取消序列化為檢索的變量。
- 用于啟用通過 zlib 進(jìn)行動態(tài)壓縮的布爾值
- 壓縮將節(jié)省緩存中的內(nèi)存 —— 雖然處理數(shù)據(jù)時都要以保存和恢復(fù)為代價。
- 以秒為單位指定的過期時間
- 當(dāng)緩存的數(shù)據(jù)過期時,它將被自動刪除。如果將此值設(shè)為
0 ,則該條目永遠(yuǎn)不會在緩存中過期。使用 Memcache API delete() 函數(shù)刪除這樣一個永久對象。
下面的代碼將使用面向?qū)ο蟮?Memcache 擴(kuò)展 API 來創(chuàng)建、存儲和檢索一個簡單對象。 清單 6. 創(chuàng)建、緩存和檢索 PHP 對象
<?php
class myCache extends Memcache { function getInstance() { static $instance;
if ( ! isset( $instance )) { $instance = new Memcache; $instance->connect( ‘198.168.0.1‘ ); }
return $instance; } function close( ) { if ( isset( $instance ) ) { $instance->close(); $instance = null; } } }
class myDatum { var $values = array( ‘description‘ => null, ‘price‘ => null, ‘weight‘ => null ); function myDatum( $settings ) { foreach ( $settings as $key => $value ) { if ( ! array_key_exists( $key, $this->values ) ) { die( "Unknown attribute: $key" ); } $this->values{ $key } = $value; } } function set( $key=null, $value=null ) { if ( is_null( $key ) ) { die( "Key cannot be null" ); } if ( ! array_key_exists( $key, $this->values ) ) { die( "Unknown attribute: $key" ); } if ( ! is_null( $value ) ) { $this->values{ $key } = $value; } return( $this->values{ $key } ); } function get( $key=null ) { return( $this->set( $key, null ) ); } }
$datum = new myDatum( array( ‘description‘ => ‘ball‘, ‘price‘ => 1.50, ‘weight‘ => 10 ) );
print $datum->get( ‘description‘ ) . "\n";
$cache = myCache::getInstance( );
if ( $cache->set( $datum->get( ‘description‘ ), $datum, false, 600 ) ) { print( ‘Object added to cache‘ . "\n"); }
$cache->close();
$new_cache = myCache::getInstance( );
$new_datum = $new_cache->get( $datum->get( ‘description‘ ) );
if ( $new_datum !== false ) { print( ‘Object retrieved from cache‘ . "\n"); print $new_datum->get( ‘description‘ ) . "\n"; }
print_r( $new_cache->getExtendedStats() );
$new_cache->close(); ?>
|
myCache 類是單件并提供指向緩存的單獨的開放連接。myDatum 類代表了所有對象:它有一系列屬性(實現(xiàn)為散列),以及一個 getter 和一個 setter 方法。要創(chuàng)建 myDatum 對象,請把一個值散列傳遞給其構(gòu)造函數(shù)。要設(shè)定屬性,請調(diào)用帶有屬性名的 set() 作為字符串和值。要獲得屬性,請調(diào)用帶有屬性名的 get() 。
以上代碼中的最后幾行將創(chuàng)建對象、把對象存儲到緩存中并檢索對象。Memcache API 的倒數(shù)第二行、部分將顯示緩存的統(tǒng)計信息。如果使用新的 PHP 命令行解釋程序運行清單 6,則應(yīng)當(dāng)會看到類似清單 7 所示的內(nèi)容。 清單 7. 創(chuàng)建、緩存和檢索 PHP 對象
ball Object added to cache Object retrieved from cache ball Array ( [72.51.41.164:11211] => Array ( [pid] => 865 [uptime] => 3812845 [time] => 1173817644 [version] => 1.1.12 [rusage_user] => 0.043993 [rusage_system] => 0.038994 [curr_items] => 1 [total_items] => 5 [bytes] => 145 [curr_connections] => 1 [total_connections] => 8 [connection_structures] => 3 [cmd_get] => 5 [cmd_set] => 5 [get_hits] => 5 [get_misses] => 0 [bytes_read] => 683 [bytes_written] => 1098 [limit_maxbytes] => 67108864 ) )
|
十分簡單,不是?如果 myDatum 的構(gòu)造函數(shù)是典型的,則它將很可能被給定一個 ID 并將查詢數(shù)據(jù)庫以生成特定行(例如,查找社會安全號碼為 123-45-6789 的學(xué)生)。您可以擴(kuò)展構(gòu)造函數(shù)以便在緩存中首先查找 ID。如果找到,則只需返回該對象。否則,構(gòu)造對象,緩存并返回該對象。 如果有一組 Debian Linux 系統(tǒng),則可以復(fù)制或?qū)С觯ㄍㄟ^ NFS)/opt/lampp 并在多個系統(tǒng)中運行 memcached。在兩臺或多臺計算機(jī)中同時運行 memcached 將刪除單點故障并擴(kuò)展緩存的容量。使用 addServer() API 函數(shù)來構(gòu)建一列可用的 memcached 服務(wù)器。
|