MartinStreicher(mstreicher@linux-mag.com),主編,LinuxMagazine2007年5月15" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

[轉(zhuǎn)]為 PHP 應(yīng)用提速、提速、再提速!,第 3 部

系統(tǒng) 2230 0
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

Martin Streicher ( mstreicher@linux-mag.com ), 主編, Linux Magazine

2007 年 5 月 15 日

為 PHP 應(yīng)用提速、提速、再提速! ” 系列文章探討了 XCache 和 XDebug,現(xiàn)在將探討 Memcache 守護程序。Memcache 守護程序 (memcached) 是一種高性能分布式對象緩存。memcached 的安裝位置介于應(yīng)用程序與數(shù)據(jù)存儲之間,它將把對象保存在 RAM 中。每次緩存命中將替換到數(shù)據(jù)庫服務(wù)器的一次往返,使應(yīng)用程序運行得更快。
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->

本系列文章的前兩篇文章提供了為 PHP 應(yīng)用程序提速的技術(shù)。 第 1 部分 介紹了 XCache,它是把 PHP 操作碼緩存到內(nèi)存中的 PHP 擴展。XCache 將避免代價高昂且(嚴(yán)格來說)不必要的花費來重新編譯相同的 PHP 代碼去交付一個頁面。XCache 是免費的開源軟件,安裝費時不多卻可提供巨大回報。 第 2 部分 介紹了 XDebug,它是配置 PHP 代碼的 PHP 擴展。XDebug 是類似于軟件 x 光照片的內(nèi)容:它將深入應(yīng)用程序,揭露內(nèi)部工作原理,并且揭示代碼如何度過其周期。擁有了 XDebug 度量之后 —— 而不是之前 —— 您可以優(yōu)化代碼來調(diào)整算法、減少瓶頸并減輕過多的內(nèi)存使用。

注: XCache 適于生產(chǎn)使用。在開發(fā)過程中使用 XDebug 最佳,因為其計算負載在活動計算機中是十分浪費的。

這一次,讓我們探究第三種尤為有效的性能增強因素。名為 memcached 的 Memcache 守護程序是一種高性能的分布式對象緩存。memcached 的安裝位置介于應(yīng)用程序與數(shù)據(jù)存儲之間,它將把對象保存在 RAM 中。

Memcache PHP 擴展將為訪問緩存提供一個簡單的應(yīng)用程序接口 (API)。要使用緩存,需要調(diào)用 API 來確定先前是否已緩存了對象。如果已經(jīng)緩存,只需檢索該對象并繼續(xù)進行處理。否則,轉(zhuǎn)至數(shù)據(jù)庫、獲取必需的數(shù)據(jù)、將其映射到對象中并把它添加到緩存中。在那里,memcached 將最小化或消除針對您先前處理過的信息的數(shù)據(jù)庫查詢。

如果 XCache 和 XDebug 是渦輪增壓器,那么 memcached 就是噴氣發(fā)動機。請準(zhǔn)備好點燃加力燃燒室。

更高的速度需求

通常,PHP 應(yīng)用程序中最耗費時間的任務(wù)是數(shù)據(jù)檢索。實際上,用于從存儲庫(文件或數(shù)據(jù)庫服務(wù)器)中獲取信息的時間遠高于編譯并且甚至是執(zhí)行 PHP 程序所需耗費的時間。連接至數(shù)據(jù)庫服務(wù)器所需的時間是一次延遲,等待查詢完成添加附加停頓,并且結(jié)果的傳輸甚至?xí)?dǎo)致更多延遲。此外,如果代碼使用對象,則有指向?qū)ο蟮膶?dǎo)致負擔(dān)過重的映射平面行。

MySQL 可以使用其查詢緩存為查詢階段提速。您還可以復(fù)制數(shù)據(jù)庫(一個主數(shù)據(jù)庫,多個副本),從而在多個 CPU 之間分擔(dān)查詢處理的負擔(dān)。但是,一旦底層表改變,MySQL 查詢緩存的內(nèi)容就會過時。而且,僅當(dāng)一個查詢與先前查詢相同時,查詢緩存才會被命中。副本也有限制。例如,無法分布數(shù)據(jù)庫寫操作。

從根本上說,雖然查詢緩存和數(shù)據(jù)庫副本都是有目的的并且在整體工作負載管理策略中占有地位(查詢緩存將消耗一些內(nèi)存,但是在其他方面卻很節(jié)省;副本將把災(zāi)難停機的風(fēng)險降至最低),但是連接和傳輸時間不變。

Memcache PHP 擴展將把對象緩存到 RAM 中。每次緩存命中將替換到數(shù)據(jù)庫服務(wù)器的一次往返,使應(yīng)用程序運行得更快。您很可能會發(fā)現(xiàn) memcached 也(間接地)提高了數(shù)據(jù)庫服務(wù)器的性能;由于 memcached 將用作替代持久性存儲,因此到達數(shù)據(jù)庫服務(wù)器的請求更少,使數(shù)據(jù)庫服務(wù)器可以更高效地響應(yīng)已收到的查詢。

您可以在一臺或多臺服務(wù)器上運行 memcached,并且將在所有節(jié)點之間復(fù)制緩存的內(nèi)容。如果服務(wù)器出現(xiàn)故障,客戶機 API 軟件將把緩存讀寫操作重新路由到正常運行的備用服務(wù)器上。

不同于 XCache,您必須修改代碼才能集成 memcached。不過,如果您已經(jīng)小心地隔離了一些對象方法內(nèi)的數(shù)據(jù)庫訪問代碼,則修改將很可能十分輕微且集中。

Danga Interactive 編寫的 Memcache 守護程序是由 Berkeley Software Distribution (BSD) License 的自由條款許可的免費開源軟件。守護程序應(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)建二進制,則可以通過簡單的 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 擴展以前所示的步驟。

要構(gòu)建和部署 memcached,您需要 XAMPP 發(fā)行版,包括 XAMPP 開發(fā)文件、XAMPP 附帶的 PHP 版本的源代碼以及 memcached 的源代碼和 Memcache 的 PHP 擴展。您可以從 XAMPP 下載 XAMPP 二進制和 XAMPP 開發(fā)文件(構(gòu)建附加組件的必備文件)。您還可以使用 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 為結(jié)尾)包含二進制;后一個 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/lamppRELEASENOTES	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.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 構(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)備好進行這些構(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 distcleanexport 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 是否已成功安裝
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)建
檢驗 PHP 的自定義構(gòu)建是否替換了 XAMPP 附帶的 PHP 構(gòu)建





回頁首


構(gòu)建 PHP Memcache 擴展

新的 PHP 就緒后,下一步是構(gòu)建和安裝 PHP Memcache 擴展。該擴展將提供訪問 Memcache 守護程序的服務(wù)所需的 API。

首先將檢索 Memcache 擴展的源代碼。您可以再次使用 wget 來獲得源代碼,請使用以下命令:

              $ wget http://pecl.php.net/get/memcache-2.1.0.tgz
            

構(gòu)建 Memcache 擴展的過程與構(gòu)建其他 PHP 擴展的過程完全相同:

  1. 切換到源代碼的目錄
  2. 運行 phpize ,后接 ./configure make make install
  3. 確保使用新版本的 phpize
  4. 把 /opt/lampp/bin 放到 shell 的 PATH 中,位于包含其他版本的 phpize 的所有目錄之前:
                      $ cd memcache-2.1.0$ export PATH=/opt/lampp/bin:$PATH$ phpize$ ./configure$ make...$ sudo make installInstalling shared extensions:    /opt/lampp/lib/php/extensions/no-debug-non-zts-20020429/
                    

構(gòu)建將把一個名為 memcache.so 的新文件放入擴展目錄。要加載并應(yīng)用擴展,您必須編輯 php.ini。打開 XAMPP PHP 配置文件 /opt/lampp/etc/php.ini 并添加清單 3 中的代碼行。


清單 3. 編輯 php.ini

                              extension=memcache.somemcache.allow_failover = 1 memcache.max_failover_attempts=20 memcache.chunk_size =8192 memcache.default_port = 11211 
            

第 1 行將加載 Memcache 擴展。其他四行是用于控制擴展的參數(shù)。按順序,從頂部到底部:

memcache.allow_failover
一個布爾值,用于控制當(dāng)連接出錯時 Memcache 擴展是否故障轉(zhuǎn)移到其他服務(wù)器上。默認值為 1 (true)。
memcache.max_failover_attempts
一個整型值,用于限制連接到持久性數(shù)據(jù)或檢索數(shù)據(jù)的服務(wù)器數(shù)目。如果 memcache.allow_failover 為 false,則將忽略此參數(shù)。默認值為 20
memcache.chunk_size
一個整型值,用于控制數(shù)據(jù)傳輸?shù)拇笮 DJ值為 8192 字節(jié) (8 KB),但是如果設(shè)置為 32768 (32 KB),則可以獲得更好的性能。
memcache.default_port
另一個整型值,用于設(shè)置連接到 Memcache 所使用的 TCP 端口。除非您修改它,否則默認值為無特權(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è)置
通過 phpinfo() 查看 Memcache 設(shè)置





回頁首


構(gòu)建 Memcache 守護程序

此過程(表面上有些冗長)還有一個額外的步驟:構(gòu)建和部署為數(shù)據(jù)管理 RAM 緩存的 Memcache 守護程序。守護程序依賴于 libevent,因此必須構(gòu)建和部署該庫,然后再編譯 memcached:

              $ wget http://www.monkey.org/~provos/libevent-1.3b.tar.gz$ wget http://www.danga.com/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.achmod 644 /opt/lampp/lib/libevent.aranlib /opt/lampp/lib/libevent.aPATH="$PATH:/sbin" ldconfig -n /opt/lampp/lib----------------------------------------------------------------------Libraries have been installed in:   /opt/lampp/lib
            

接下來的命令將構(gòu)建和安裝 memcached 二進制。


清單 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 作為一個守護程序而不是在最顯著的位置中運行。 -m number 將把 number 兆字節(jié)分配給此過程實例。(在某些系統(tǒng)中,可能會要求您運行多個 memcached 實例以訪問可用于進行緩存的所有內(nèi)存。有關(guān)更多信息,請參閱 Memcache 文檔)。 -l ip-address -p 11211 將使守護程序分別偵聽 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 進行動態(tài)壓縮的布爾值
壓縮將節(jié)省緩存中的內(nèi)存 —— 雖然處理數(shù)據(jù)時都要以保存和恢復(fù)為代價。
以秒為單位指定的過期時間
當(dāng)緩存的數(shù)據(jù)過期時,它將被自動刪除。如果將此值設(shè)為 0 ,則該條目永遠不會在緩存中過期。使用 Memcache API delete() 函數(shù)刪除這樣一個永久對象。

下面的代碼將使用面向?qū)ο蟮?Memcache 擴展 API 來創(chuàng)建、存儲和檢索一個簡單對象。


清單 6. 創(chuàng)建、緩存和檢索 PHP 對象

                              <?phpclass 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 對象

                              ballObject added to cacheObject retrieved from cacheballArray(    [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é)生)。您可以擴展構(gòu)造函數(shù)以便在緩存中首先查找 ID。如果找到,則只需返回該對象。否則,構(gòu)造對象,緩存并返回該對象。

如果有一組 Debian Linux 系統(tǒng),則可以復(fù)制或?qū)С觯ㄍㄟ^ NFS)/opt/lampp 并在多個系統(tǒng)中運行 memcached。在兩臺或多臺計算機中同時運行 memcached 將刪除單點故障并擴展緩存的容量。使用 addServer() API 函數(shù)來構(gòu)建一列可用的 memcached 服務(wù)器。





回頁首


我希望速度更快!

使用 Memcache PHP API 十分簡單,并且 memcached 十分易于部署。可能大部分工作就是(重新)構(gòu)建 PHP 本身以包括適當(dāng)?shù)臄U展。的確,如果用于構(gòu)造對象的方法已被良好隔離,則修改代碼以利用 Memcache 應(yīng)當(dāng)是小事一樁。

正如您已經(jīng)看到的,一些簡單的技術(shù)和一點點時間和努力就可以提高 PHP 應(yīng)用程序性能。在購買更多 RAM 或另一臺服務(wù)器之前,請先嘗試調(diào)整現(xiàn)有服務(wù)器。那樣做更便宜!



參考資料

學(xué)習(xí)


獲得產(chǎn)品和技術(shù)


討論



關(guān)于作者

Martin Streicher 是 Linux Magazine 的主編。他從普度大學(xué)獲得了計算機科學(xué)碩士學(xué)位,從 1982 年開始用 Pascal、C、Perl、Java 和(最近)Ruby 編程語言編寫類 UNIX 的系統(tǒng)。

From: http://www.ibm.com/developerworks/cn/opensource/os-php-fastapps3/index.html




[轉(zhuǎn)]為 PHP 應(yīng)用提速、提速、再提速!,第 3 部分: 用 Memcache 守護程序把數(shù)據(jù)緩存到內(nèi)存中


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲一区二区三区四区 | 91精品久久久久久久久网影视 | 成人性生活视频在线观看 | 日本久久黄色 | 女人色毛片女人色毛片中国 | 日韩在线观看免费 | 久久精品中文 | 天天干天天操天天爽 | 日韩性色 | 久久久青青草 | 国产精品久久久久久久久电影网 | 青草视频在线 | 成人精品在线观看 | 97超级碰碰碰视频在线视频观看 | 成人欧美一区二区三区在线播放 | 97久久精品一区二区三区观看 | 免费又粗又硬进去好爽A片视频 | 欧美性色生活片免费播放 | 亚洲一区二区三区免费观看 | 久久亚洲一区二区 | 韩国草草影院 | 亚洲艳情网站 | 日韩在线观看视频黄 | 日本一区二区视频在线 | 久久久综合九色合综国产 | 久久福利 | 日本人妖miran护士 | 黄色片在线免费看 | 精品久久久久久久久久久久久久 | 毛片在线免费观看完整版 | 欧美一级aⅴ毛片 | www亚洲精品 | 国产精品综合亚洲AV久久久小说 | 国产第一亚洲 | 午夜影院在线观看视频 | 嫩草影院国产 | 亚洲午夜精品视频 | 日韩精品专区在线影院重磅 | 久九九精品免费视频 | 久草免费在线观看 | 国产在线激情视频 |