我們用 WordPress 搭建的網站,隨著訪問量增大或者外掛越裝越多的時候,網站載入頁面會很慢,這是有 WordPress 記憶體機制決定的,用 Memcached 可以解決這一問題,Memcached 讓最常訪問的那些內容快取在記憶體中,有新訪客到來的時候,先從記憶體中找,找到了就直接返回,否則再去查資料庫,這樣就極大地提高了效能。那麼,在 WordPress 中,我們怎麼使用 memcached 呢?這不是僅僅安裝 memcached 軟體就可以做到的,還要和 PHP 結合起來,所以涉及到好幾個部分,下面分別闡述:

1. 透過 yum 安裝

yum -y install memcached

#安裝完成後執行:
memcached -h
#出現 memcached 幫助資訊說明安裝成功

2. 加入啟動服務
chkconfig –level 2345 memcached on

3. 配置 Memcached
vim /etc/sysconfig/memcached

#檔案中內容如下,按需要修改:
PORT=」11211″ #埠
USER=」root」 #使用者名稱
MAXCONN=」1024″ #最大連線數
CACHESIZE=」64″ #記憶體大小 (MB)
OPTIONS=」」 #附加引數

其中 「memcached 資料庫未授權訪問漏洞解決」
設定 OPTIONS=」-l 127.0.0.1″ 即可

4. 安裝 libmemached
wget https://launchpad.net/libmemcached/1.0/1.0.16/+download/libmemcached-1.0.16.tar.gz
tar -zxvf libmemcached-1.0.16.tar.gz
cd libmemcached-1.0.16
./configure -prefix=/usr/local/libmemcached -with-memcached
make && make install

如遇到報錯:g++: command not found 請安裝 gcc+
yum -y install gcc+ gcc-c++
make clean 後,重新執行:make && make install

 

5. 安裝 php-devel
yum install php-devel

6. 安裝 PHP Memcached 擴充套件
wget http://pecl.php.net/get/memcached-2.1.0.tgz
tar -zxvf memcached-2.1.0.tgz
cd memcached-2.1.0
/usr/local/php/bin/phpize (若提示-bash: /usr/local/php/bin/phpize: No such file or directory,直接 phpize,若依舊提示命令錯誤,請百度 php 環境安裝)
(在 phpize 生成 configure 檔案過程中,不要輸入任何命令,否則造成./configure: line 7933: syntax error: unexpected end of file 的錯誤,若出現此錯誤,
請重新輸入命令 phpize 重新生成 configure 檔案)

./configure -enable-memcached -with-php-config=/usr/local/php/bin/php-config -with-zlib-dir -with-libmemcached-dir=/usr/local/libmemcached -prefix=/usr/local/phpmemcached
(若提示 configure: error: Cannot find php-config. Please use –with-php-config=PATH,表示你的 php-config 檔案不
在目錄/usr/local/php/bin/下,使用命令 find / -name php-config 查詢,我的在 /usr/bin/php-config)

make && make install

報錯:memcache support requires ZLIB 解決辦法
yum install zlib-devel

記錄下安裝成功後的提示,類似於:
Installing shared extensions: /usr/lib/php/modules/

7. 增加擴充套件 extension 配置檔案
vi /etc/php.d/memcached.ini
最後一行增加
extension=memcached.so

產看 memchached 執行狀態
telnet 127.0.0.1 11211 (提示-bash: telnet: command not found,直接用命令 「 yum -y install telnet」 安裝就行了,
提示 telnet: connect to address 127.0.0.1: Connection refused 表示 memcached 未啟用
使用命令 memcached -d start -u root
)

出現 Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is 『^]』.
時,使用以下命令

stats 檢視 memcached 執行狀態
quit(退出時命令)

8.find / -name php.ini 找到 php.ini 檔案
php.ini
新增一行 extension=memcached.so
9. 重啟 nginx/amapche,重啟 php-fpm,使用 phpinfo() 檢視 memcached 模組是否安裝成功。

10.wordpress 支援 memcached ,使用外掛 memcached is your frend ,安裝即可

注意了,使用 Memcahced 的時候,請不要把過期時間設定成超過 30 天

最近做專案的時候,使用 Memcahced 進行快取的時候,有個資料因為使用比較少,就像快取的舊一些,把設定為一年,寫入快取的時候返回 true,但是使用該 key 去獲取的時候總是返回 null,最後查手冊才發現,Memcahced 過期時間不能超過 30 天

關於 Memcached 過期時間的詳細解釋:

  • 過期時間是一個 Unix 時間戳,也可以是一個從現在算起的以秒為單位的數字。
  • 那麼怎麼判斷是 Unix 時間戳還是一個從現在算起的以秒為單位的數字呢?小於 60×60×24×30(30 天時間的秒數),就算是從現在算起的以秒為單位的數字。如果大於服務端會將其作為一個真實的 Unix 時間戳來處理而不是自當前時間的偏移。
  • 如果過期時間被設定為 0(預設),此元素永不過期 (但是它可能由於服務端為了給其他新的元素分配空間而被刪除) 。

所以如果真的要設定一個 key 的過期時間為一年後,其值應該設定為:time()+60×60×24×365