人氣 577°c

WP開啟物件緩存(對象緩存)減少數據庫負載

WordPress 在網站狀態檢查到 You should use a persistent object cache 這個網站應該使用持續物件快取(您應該使用持久對象緩存)這樣!我們可以根據信息提示開啟 Memcached or APC Object Cache 物件緩存(對象緩存)外掛。

目前比較流行的有「Memcached」以及「Redis」記憶體(內存)緩存,能夠幫助網站及博客所需的資料庫查詢更少,訪客打開頁面速度更快。其實! WordPress 官方都建議大家開啟記憶體(內存)緩存,而我們熟悉的 Discuz、PHPWind、phpBB 知名程序都有使用 Memcached 內存緩存,可以極大地減少 MySQL 查詢,從而達到加速的目的。

準備功夫:

首先!請開啟伺服器(服務器)的 Redis 或 Memcached 物件快取

教學:WP Cache Edu

Server 安裝和配置 Memcached 或 Redis 物件緩存(對象緩存)完成,然後!...使用 W3 Total Cache、Object Cache 4 everyone 或 Redis Object Cache 外掛,開啟 WordPress 記憶體(內存)Cache。

做法一:Memcached 

Object Cache 4 everyone:Memcached Object Cache

說明:安裝外掛並啟用後。在網站的 ./wp-content/ 目錄中產生 object-cache.php 檔案。

object-cache.php 文件下載(新):Kadamwhite!

註解:如果你不想安裝外掛,請自行下載 object-cache.php 文件,手動上傳到上述位置。

做法二:Redis

Redis Object Cache:Redis Object Cache

說明:安裝外掛並啟用後。如看到下圖一樣,就說明你已經開啟 Redis 的 Object Cache 了。

做法三:

W3 Total Cache:W3TC SEO Cache

說明:安裝外掛並啟用後。在控制台的右側欄點擊「Performance」→「Setup Guide」快速設置。根據個別設定 Page Cache、Database Cache、Object Cache 緩存引擎。外掛支持 Disk、Redis、Memcached、APC、eAccelerator、XCache、WinCache等記憶體(內存)分布式緩存服務。請看圖片▼

做法四:

LiteSpeed Cache:LiteSpeed Cache

說明:Object Cache 位置,若您的伺服器提供 Memcached 或 Redis 擴充模組,Connection Test 也顯示 Passed (主機允許 Object Cache),建議開啟 Object Cache,若您的主機方案不允許 Object Cache,則 Connection Test 將顯示 Failed。Method 位置,如果您的 Object Cache 是 Memcached 或 LSMCD,請將 Method 設置為 Memcached。如果您的 Object Cache 是 Redis,請將 Method 設置為 Redis。好了! Object Cache Settings 基本上就設置完成了,其它設定維持預設即可。請看圖片▼

做法五:

Cache Master:Cache Master

說明:插件支持 Redis、Memcahced、Memcahe、APC、APCu、WinCahce等記憶體(內存)分布式緩存服務,若是你使用 Memcahced 緩存,先按「Advanced」進階頁面,Memcached 的地方「Connection」選擇 TCP;「主機」輸入 IP位置;「通訊阜」輸入 Port。回到「Basic」基本設定,你會看到 Memcached 已經亮起綠燈了,這時就可以把「快取驅動程式」選擇 Memcached。請看圖片▼

做法六:

說明:由於使用的網存是共享網頁寄存服務器(別稱:虛擬空間、虛擬主機)不支援 Memcached 及 Redis 緩存,他們建議ME使用File-based Caching。找來 W3 Total Cache Plugins 開啟 Disk Cache。也可以做到數據緩存效果,和解除網站狀態「持續物件快取」警示。請看圖片▼

Page Cache:「Disk: Basic」或「Disk: Enhanced (Recommended)」

Database Cache:Disk

Object Cache:Disk

見證奇蹟的時刻:

數據庫執行時間及查詢次數代碼:
timer_stop&get_num_queries
(將代碼粘貼到風格主題文件即可)

主頁 / 首頁

開啟前:數據庫查詢 13 次 請看圖片▼

開啟後:數據庫查詢 2 次 請看圖片▼

文章頁

開啟前:數據資料查詢 18 次 請看圖片▼

開啟後:數據資料查詢 8 次 請看圖片▼

✨經測試 Memcached 或 Redis Object Cache 與 WordPress 官方推出 WP Super Cache 緩存插件無縫接合。

FAQ

1. 非本地 Memcached Server 或多個網站配置,請前往外掛頁,有相關的說明檔。

2.1 非本地 Redis Server 或使用帶密碼鑒權的 Redis Server?

如果你是使用非本地的 Redis Server(比如雲 Redis),那麼你需要在「wp-config.php」文件,加入以下代碼來進行配置。

define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
// define( 'WP_REDIS_PASSWORD', 'secret' );
define( 'WP_REDIS_TIMEOUT', 1 );

2.2 如果一個伺服器上有多個 Redis ,如何配置使數據不會混淆呢?

有兩種方式:wp-config.php 文件加入以下代碼

第一種方式是可以給你的不同網站配置不同的 Redis DB,只需要在文檔中加入如下的配置,即可實現不同的網站使用不同的 Redis 資料庫,你可以從 0 開始,向上遞增設定不同的 Redis 資料庫。

define( 'WP_REDIS_DATABASE', 0 );

第二種方式是你無法控制 Redis,必須使用同一個資料庫,那麼你可以通過給其添加不同的 salt 來實現,即使,使用同一個資料庫,數據也不會產生混淆。或者,如果你在 cPanel 或 DirectAdmin 網站控制台,為 Redis 加上密碼保護,請替換以下 Key 為你在虛擬空間中創建的密碼。

define('WP_CACHE_KEY_SALT', 'www_moonlol_com_');

3. 有些外掛可能需要你提供「TCP」或「Unix Socket」信息,如是 Memcached 緩存,一般填寫「Host」主機為"127.0.0.1"「Port」通訊埠為"11211" 或「Host」主機為"/path/to/memcached.sock"「Port」通訊埠為"11211"or "11212"。如是 Redis 緩存,一般填寫「Host」主機為"127.0.0.1"「Port」通訊埠為"6379"接口。

如果你的主機接口有所不同,可以新建一份 PHP 文件,填入以下內容,上傳到網站的根目錄,打開網址查看結果。

Memcached:

<?php
$conn = new Memcached ;
$address = '/path/to/memcached.sock' ; // set the address here
$port = 0 ; // set the port
$conn->addServer( $address, $port ) ;
var_dump( $address ) ;
var_dump( $port ) ;
var_dump( $conn->getStats() ) ;
echo '<hr>';
var_dump($conn->getServerList());
?>

Redis:

<?php
$cfg_host = 'redis address' ;
$cfg_port = '6379' ; // or 0 if use socket
$cfg_pswd = '' ; // Set if has
$cfg_db = 0 ;
$conn = new Redis() ;
$conn->connect( $cfg_host, $cfg_port ) ;
if ( $cfg_pswd ) $conn->auth( $cfg_pswd ) ;
if ( $cfg_db ) $conn->select( $cfg_db ) ;
var_dump( $conn->ping() ) ; // Should give a `+PONG`
?>

資料來源:LiteSpeed LSCache

4. 如有需要!你可以修改記憶體(內存)限制從而提升網站性能。在 WordPress 根目錄的 wp-config.php 配置文件,打開該文件加入以下內容。就只有兩行代碼,正常情況下設置 WP_MEMORY_LIMIT 就可以了,128MB 也是我自己比較大型一些的網站所使用的配置,加上主題和外掛的優化,這樣的記憶體(內存)絕對是足夠的,而對於一些需要產生大型文件的時候,可以通過拆分生成後合並的方式做到,也能夠很好的節省到服務器內存。

// WordPress 記憶體(內存)限制
define( 'WP_MEMORY_LIMIT', '128M' ); //前端
define( 'WP_MAX_MEMORY_LIMIT', '256M' ); //後端

小智識:Memcached 與 Redis 對比總結

[Memcached 特點]
1、速度最快(網上有詳細的測試用例)
2、支持水平擴展,可以任意添加節點

[Redis 特點]
1、速度沒有 Memcached 快
2、支持M/S的主從備份
3、可以支持多數據庫
4、操作指令很豐富
5、支持異步數據持久化(以文件儲存)

總結:
1、如果是簡單的數據緩存建議使用 Memcached
2、如果要對單一操作的數據量非常的大則使用 Memcached
3、如果想做性能很好的緩存集群可以用 Redis (M/S讀寫分離,如 Yahoo 的排行榜等)
4、如果在高並發下又想儲存數據則可以用 Redis (如:熱門文章、文章瀏覽次數 Memcached 也不錯)

相關文章:
1. WP開啟內置修復&優化數據庫工具
2. WP數據庫(資料庫)優化WP-Sweep
3. WP的imagick模組及持續物件快取(持久對象緩存)
4. phpMyAdmin將MyISAM轉換InnoDB修改為MyISAM
5. WordPress出現致命錯誤
6. W3 Total Cache開啟Cloudflare CDN
標籤: