《WordPress啟用memcached動態緩存以及報錯解決》要點:
本文介紹了WordPress啟用memcached動態緩存以及報錯解決,希望對您有用。如果有疑問,可以聯系我們。
DEDECMS案例說到php的memcached和memcache組件,百度一搜都會教你如何安裝memcache(d),然后很多人就照著做,做到最后發現不對,試了半天雖然搞定了,但還是不知道到底有d還是沒有d,比如這位博客仁兄的經驗分享:
DEDECMS案例為什么他選第二個不行?其實php的這2個組件還是有點區其余:
簡單來說:
DEDECMS案例其實,我們這種小網站的話,二選一即可,這點QPS還不至于糾結.不過一旦選擇了,安裝的時候就要注意區分,一對一配套安裝,別搞的牛頭不對馬嘴,出現上面那位仁兄的困惑(后文有相關說明).
DEDECMS案例這里,我果斷選擇了帶d的,繼續分享.
DEDECMS案例Ps:說到這里又殺出一個容易混淆的程咬金.這里要安裝的memcached是指Mencached的服務端,用來處置緩存數據.
DEDECMS案例下面2種安裝方式任選其一:
DEDECMS案例①、在線安裝
②、編譯安裝
- #Centos直接使用yum安裝即可,其他系統自行搜索安裝命令,比如ubuntu?
- yum?-y?install?memcached?
- ?
- #啟動memcached?
- service?memcached?start?
- ?
- #開機啟動?
- chkconfig?memcached?on?
DEDECMS案例相比在線安裝,很多時候編譯安裝更加靈活,非常類似Windows平臺的自定義安裝或綠色安裝,保舉熟悉 Linux 系統的朋友使用:
?
- #從官方下載最新源碼包?
- wget?http://memcached.org/files/memcached-1.4.25.tar.gz?
- ?
- #解壓開始編譯安裝?
- tar?xzvf?memcached-1.4.15.tar.gz?
- cd?memcached-1.4.15?
- ./configure?--prefix=/usr/local/memcached?
- make?&&?make?install?
- cd?..?
- ?
- #設置環境?
- ln?-s?/usr/local/memcached/bin/memcached?/usr/bin/memcached?
- cp?scripts/memcached.sysv?/etc/init.d/memcached?
- ?
- #改為監聽127.0.0.1,并關閉UDP連接方式,若為遠程服務調用或不必要的話請跳過此行?
- sed?-i?'s/OPTIONS=""/OPTIONS="-l?127.0.0.1?-U?0"/g'?/etc/init.d/memcached?
- ?
- sed?-i?'s@chown@#chown@'?/etc/init.d/memcached?
- sed?-i?'s@/var/run/memcached/memcached.pid@/var/run/memcached.pid@'?/etc/init.d/memcached?
- ?
- #啟動并設置開機服務?
- chmod?+x?/etc/init.d/memcached?
- service?memcached?start?
- chkconfig?--add?memcached?
- chkconfig?memcached?on?
DEDECMS案例①、先安裝libmemcached
DEDECMS案例先提前分享一個問題,如果直接依照網上的教程安裝php-memcached可能會報如下錯誤:
configure: error: no, sasl.h is not available. Run configure with --disable-memcached-sasl to disable this check
先看看SASL是什么?
SASL全稱Simple Authentication and Security Layer,是一種用來擴充C/S模式驗證能力的機制.
簡單來說SASL是一個膠合(glue)庫,通過這個庫把應用層與形式多樣的認證系統整合在一起.這有點類似于 PAM,但是后者是認證方式,決定什么人可以訪問什么服務,而SASL是認證過程,側重于信任建立過程,這個過程可以調用PAM來建立信任關系.在這里Memcached就是上面提到的應用層,具體的認證交給SASL庫,SASL會根據相應的認證機制來完成驗證功能.
果然,一般也用不到,所以大部分教程都是使用錯誤提示中的 --disable-memcached-sasl 來禁用張戈功能,作為一個強迫癥,我還是從國外的論壇扒到了解決方法,很簡單,在編譯libmemcached之前,先安裝cyrus-sasl-devel即可解決
?
- yum?install?cyrus-sasl-devel?
DEDECMS案例接著開始編譯安裝libmemcached:
?
- wget?https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz?
- tar?xzf?libmemcached-1.0.18.tar.gz?
- cd?libmemcached-1.0.18?
- ./configure?--with-memcached=/usr/local/memcached?--prefix=/usr/local/libmemcached?
- make?&&?make?install?
- cd?..?
DEDECMS案例②、安裝php-memcached組件
DEDECMS案例下載和解壓這步,我們要區分下是php7還是之前的版本:
DEDECMS案例I、如果當前環境是php7 :
?
- #從github下載PHP7專用的memcached組件分支?
- wget?https://github.com/php-memcached-dev/php-memcached/archive/php7.zip?
- #解壓備用?
- unzip?php7.zip?
- cd?php-memcached-php7?
DEDECMS案例
II、如果是之前的php版本:
?
- #從官方下載php-memcached的最新源碼包?
- wget?http://pecl.php.net/get/memcached-2.2.0.tgz?
- ?
- #解壓和編譯?
- tar?zxvf?memcached-2.2.0.tgz?
- cd?memcached-2.2.0?
DEDECMS案例接下來開始編譯:
?
- #注意已有php的實際路徑?
- /usr/local/php/bin/phpize?
- ./configure?--with-php-config=/usr/local/php/bin/php-config?
- make?&&?make?install?
DEDECMS案例編纂php.ini文件,在最后插入如下參數
?
- extension=memcached.so?
DEDECMS案例Ps:找不到php.ini ? 很簡單執行命令:php --ini 即可找到,不信你嘗嘗.
DEDECMS案例保留后,執行如下命令看看是否加載成功:
?
- php?-m?|?grep?memcached?
DEDECMS案例?
DEDECMS案例如果輸出memcached則表現成功.
DEDECMS案例最后,如果是Nginx就 service php-fpm reload ,如果是Apache就重啟Apache完成安裝.
DEDECMS案例③、測試緩存
?
- <?php?
- $m?=?new?Memcached();?
- $m->addServer(?'127.0.0.1',?11211?);?
- $m->set(?'foo',?100?);?
- echo?$m->get(?'foo'?)?.?"\n";?
DEDECMS案例將上述代碼保留為 test.php,然后執行 php -f test.php,如果能輸出100表示安裝成功.
DEDECMS案例做完上述所有步調,還只能說明系統環境已經支持了memcached緩存.下面我們還要將這個緩存用起來才行.
DEDECMS案例值得說明的是,這里還有一個大坑等著你來踩:
WordPress官網上的object-cache.php雖然也號稱Memcached 插件,然而它只支持Memcache,不支持新版的,所以不克不及使用.如果錯誤地將object-cache.php和Memcached混用的話,則會出現WordPress打不開,前臺后臺頁面一片空白的現象.
?
DEDECMS案例這也便是經常有站長反饋WordPress啟用memcached功能后,頁面空白的錯誤原因了.不巧,張戈在測試的時候也踩坑了,所以特別提出來,希望大家了解錯誤的原因,規避掉!
DEDECMS案例所以,如果你一開始選擇的是不帶d的memcache,那么直接用WordPress官方的object-cache.php插件即可!如果你選擇的是帶d的memcached,那么這里就不克不及用官方的插件,而是要用github版本:
DEDECMS案例https://github.com/tollmanz/wordpress-pecl-memcached-object-cache
DEDECMS案例在這里下載并解壓獲得的 object-cache.php,上傳到 wp-content 目錄即可開啟memcached緩存.當然,不管是帶d的還是不帶d的,記得都是上傳到wp-content目錄.
?
DEDECMS案例做完第2步之后,你可以去網站前臺刷新幾次,發生緩存,然后從官方下載探針:
DEDECMS案例http://pecl.php.net/get/memcache-3.0.8.tgz
DEDECMS案例解壓后,里面有一個memcache.php文件,編纂并找到如下代碼:
?
- define('ADMIN_USERNAME','memcache');????//?Admin?Username?
- define('ADMIN_PASSWORD','password');????//?Admin?Password?
- define('DATE_FORMAT','Y/m/d?H:i:s');?
- define('GRAPH_SIZE',200);?
- define('MAX_ITEM_DUMP',50);?
- ?
- $MEMCACHE_SERVERS[]?=?'mymemcache-server1:11211';?//?add?more?as?an?array?
- $MEMCACHE_SERVERS[]?=?'mymemcache-server2:11211';?//?add?more?as?an?array?
DEDECMS案例
修改如下:
?
- define('ADMIN_USERNAME','memcache');????//?Admin?Username?登錄名稱,自行修改?
- define('ADMIN_PASSWORD','password');????//?Admin?Password?登錄暗碼,自行修改?
- define('DATE_FORMAT','Y/m/d?H:i:s');?
- define('GRAPH_SIZE',200);?
- define('MAX_ITEM_DUMP',50);?
- //下面是定義memcached服務器,一般我們是單機部署,所以注釋掉一行,并將服務器地址根據實際修改,比如本文是127.0.0.1?
- $MEMCACHE_SERVERS[]?=?'127.0.0.1:11211';?//?add?more?as?an?array?
- //$MEMCACHE_SERVERS[]?=?'mymemcache-server2:11211';?//?add?more?as?an?array?
DEDECMS案例上傳到網站私密目錄(臨時測試可以放到根目錄),然后通過前臺訪問memcache.php這個文件,輸入上面的用戶名和暗碼即可看到memcached狀態:
DEDECMS案例
DEDECMS案例如果發現頁面可以打開,但是里面沒有Hits數據,說明WordPress并沒有成功連接到memcached,這時候我們可以在wp-config.php參加如下參數:
?
- global?$memcached_servers;?
- $memcached_servers?=?array(?
- ????array(?
- ????????'127.0.0.1',?//?Memcached?server?IP?address?
- ?????????11211????????//?Memcached?server?port?
- ????)?
- );?
DEDECMS案例實際的memcached監聽IP和端口,你可以通過如下命令查看:
?
- netstat?-nutlp?|?grep?memcache?
DEDECMS案例實際上memcached可以緩存動態查詢數據,他也可以緩存html內容!所以說,memcached也能實現和其他方案原因的html純凈態緩存!實現原理和我之前分享的php代碼緩存html方案類似,不外后者更好的是將緩存內容放在了內存當中,速度比放硬盤快的絕對不是一點點.
DEDECMS案例如何將前臺頁面html都緩存到memcached中呢?這里,我們必要用到?batcache 這款插件.
DEDECMS案例直接在WordPress后臺搜索安裝?batcache ,也可以從官方下載插件包:
DEDECMS案例https://wordpress.org/plugins/batcache/
DEDECMS案例然后解壓獲得?advanced-cache.php 上傳到wp-content即可.
DEDECMS案例在wp-config.php中啟用緩存:
?
- define('WP_CACHE',?true);?
- var?$max_age?=??3600;?//?Expire?batcache?items?aged?this?many?seconds?(zero?to?disable?batcache)?
- var?$remote??=????0;?//?Zero?disables?sending?buffers?to?remote?datacenters?(req/sec?is?never?sent)?
- var?$times???=????2;?//?Only?batcache?a?page?after?it?is?accessed?this?many?times...?(two?or?more)?
- var?$seconds?=??0;?//?...in?this?many?seconds?(zero?to?ignore?this?and?use?batcache?immediately)?
DEDECMS案例max_age代表緩存過期時間(以秒為單位),times表示拜訪多少次才創建緩存(2是最小值),seconds表示在多少秒之后才創建緩存(0表示立即).
DEDECMS案例我目前也只是要用到memcache的動態緩存,所以對付batcache也只是初步了解狀態,感興趣的朋友可以自行搜索學習更多相關設置.
來源:http://zhangge.net/5097.html
維易PHP培訓學院每天發布《WordPress啟用memcached動態緩存以及報錯解決》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。