多數站長還在用 WordPress 預設的快取機制,往往不知道每一次訪客造訪網站都在燒資料庫資源。在沒有持久化快取工具支持下,WordPress 每次載入頁面都必須重新查詢相同的資料——用戶資訊、文章中繼資料、分類清單——這些明明已經查過,卻要一查再查。Redis 物件快取如何讓快取命中率翻倍,以及從零開始建置的設定流程,正是本文重點。
WordPress 預設快取的天生限制
WordPress 的快取系統分兩層:頁面快取把整個 HTML 頁面存起來,訪客來了直接吐 HTML,完全不跑 PHP——效能最強、但只對未登入訪客管用;物件快取則是存「資料片段」,比如文章 ID、分類、用戶權限,登入登出都能用。
問題在於 WordPress 的預設物件快取是「非持久化」的。每一個請求結束後,快取的內容全部清空,下一個訪客來了就得重新查一次。想像把玻璃杯裝滿水,每次倒完一杯就把水桶倒掉,下一個人來還得再打一次水——這就是非持久化快取的效率問題。
一個正常流量的 WordPress 網站,每個頁面載入都會觸發 50 到 100 筆資料庫查詢。如果快取無法跨越請求保存,那就等於每次都必須執行完整的資料庫查詢序列。這對中等以上流量的站點、特別是 WooCommerce 店鋪或會員網站,等於每秒鐘都在重複白工。
Redis 如何降低資料庫查詢
Redis 是一套記憶體資料庫,原理很簡單:把常用的資料存在 RAM 裡,需要時直接讀 RAM,不用碰硬碟上的 MySQL。記憶體存取速度是資料庫查詢的 100 倍以上——這個量級不是誇大,是實際測量值。
Redis Object Cache 外掛做的事,就是在 WordPress 和 MySQL 之間插入一層 Redis,把物件快取轉換成持久化。當訪客 A 載入文章時,WordPress 先查一次 MySQL 拿文章資訊,但同時把資訊存進 Redis;訪客 B 馬上來了,WordPress 不再問 MySQL,直接從 Redis 讀,幾毫秒搞定。
根據實際測試數據,導入 Redis 後,資料庫查詢次數通常會降到原來的 1/5 甚至 1/10。一個原本要執行 80 筆查詢的頁面,可能降到 10 筆。每降一筆查詢,頁面加載就快一點,伺服器 CPU 就輕鬆一點,能扛的併發流量也跟著上升。
持久化快取為什麼改變遊戲規則
傳統非持久化快取只有一個作用:在單一請求內加速重複的資料訪問。比如你一個頁面範本要調 2 次用戶資訊,快取能讓第二次不用再查一次資料庫。但跨越請求,快取就沒用了。
持久化快取打破了這個限制。同樣的資訊,可能被 100 個訪客共享。一篇熱門文章的評論數、分類名稱、網站設定值,這些東西查一次就永遠在 Redis 裡,直到你手動更新內容。結果是——每一筆資訊一旦被查過一次,後續 99 次存取都是 RAM 速度。
這對已安裝的外掛特別重要。許多外掛(如 WooCommerce、SEO 外掛、表單外掛)都會大量使用 WordPress 的 Transients API(一套快取管理工具)。用預設快取時,Transients 存進去馬上又消失;用 Redis 時,這些外掛的快取突然間全部變成永久有效,直到內容更新。生態系一整個活過來。
連線設定與基本配置
要用 Redis,首先要裝 Redis Server(通常由主機商提供),再裝 PHP 擴充工具連線(PhpRedis、Predis、Relay 都行),最後裝 WordPress 端的 Redis Object Cache 外掛。這三層都到位才行,少一層都不會動。
大多數 WordPress 主機商如果有提供 Redis,會把 host、port、auth password 記錄在主機文件裡。你只需要找到這些數字,填進外掛設定就行。設定欄位通常有這些:
- host:Redis 伺服器網址,通常是
127.0.0.1(本機)或主機商給的外部位址 - port:連線埠,預設 6379
- password:Redis 驗證密碼,有些主機商會設,有些沒有
- database:Redis 內部的資料庫編號,不同應用可以用不同編號隔離資料,WordPress 通常用 0 或 1
- prefix:快取鍵值的前綴,用來避免多個 WordPress 網站在同一 Redis 中互相干擾(例如前綴設成
mysite_,所有快取鍵都會是mysite_post_123這樣)
最簡單的驗證方式是在外掛設定頁面存檔後,上方會出現一條綠色提示「Redis connected successfully」或紅色警告「Failed to connect」。如果連不上,檢查 host、port、password 有沒有抄錯。
安裝後的驗證
光安裝外掛不代表有用,需要驗證三件事。
用 WP-CLI 確認外掛啟動成功。在伺服器終端執行 wp cache status,如果看到 Status: Connected,就代表連線正常;如果看到 Status: Disabled,表示外掛啟動失敗,通常是連線參數錯誤。
看外掛的統計頁面裡的快取命中率。很多 Redis 外掛都有一個儀表板,顯示「命中率」(hit ratio)。一個穩定運作的網站,命中率應該在 70% 以上;低於 50% 表示快取設定有問題或網站內容更新太頻繁。
用 Debug Bar 或 WP Query Monitor 這類外掛量測同一個頁面在導入 Redis 前後的查詢數。應該要顯著下降,如果只少 5% 不到,可能是快取時間設得太短(TTL 太低),或外掛沒有正確使用 Transients API。
哪些站點非導入不可
如果網站流量還很小,單日訪客數百,坦白說預設快取就夠用,不用急著導入。但以下情況非做不可。
WooCommerce 店鋪,購物車、訂單、產品變數、庫存——這些東西查詢頻繁又複雜,非持久化快取根本撐不住;同時線上顧客多時,MySQL 會被打趴。會員或社群網站,用戶持續登入、互動、發文、評論,登入用戶無法用頁面快取,只能靠物件快取,Redis 變成必需品。多語言或多站台場景,WordPress multisite 的跨站資料查詢會飆升,沒有 Redis 伸縮性會卡死。中等以上內容量的新聞或資訊站,分類、標籤、相關文章推薦這些都是資料庫查詢殺手,Redis 能把查詢砍半。
除了這些情況外,如果網站已經用了快取外掛(如 WP Super Cache、W3 Total Cache),再加上 Redis,雙重快取會帶來邊際效益遞減,但不會有害。通常建議頁面快取負責靜態頁面,物件快取負責動態內容,兩者互補。
從安裝到正式上線
導入 Redis 的流程按此順序進行:
確認主機有 Redis 且已啟動。不同主機商的啟動方式不同,有些是預裝,有些要透過後台啟用。找不到的話問主機商技術支援。
安裝 PHP Redis 擴充。通常主機商已裝好,但有些需要手動啟用。確認方式是執行 php -m | grep -i redis,如果有輸出就代表已裝。
在 WordPress 後台裝 Redis Object Cache 外掛,填入 host、port、password,按「Test Connection」確認連線成功。
開啟「啟用物件快取」選項。外掛會自動產生一份 object-cache.php 檔案放到 WordPress 根目錄,這是連接 Redis 的橋樑。
觀察 24 小時。看流量繁忙時期資料庫查詢數有沒有明顯下降,快取命中率有沒有穩定在 60% 以上。如果異常低,表示設定有問題,回到外掛設定檢查參數。
按外掛建議設定快取過期時間(TTL)。物件快取預設永不過期(除非你手動清除),但像是「評論數」「線上用戶數」這種會變的資料,可以設成 1 小時或更短自動刷新。
整個流程通常不到 30 分鐘,不需要寫程式,不需要改代碼,純設定工作。
上線後的調整與監控
Redis 跑起來後,下一步是持續微調。快取的原理就是「用空間換時間」,記憶體越多快取存越久,命中率越高;但記憶體是金錢,用多少要評估投報率。
觀察指標主要看三個:快取命中率、平均回應時間、資料庫連線數。命中率在 70% 以上表示設定合理;低於 50% 代表要麼快取時間設太短,要麼內容更新太頻繁;接近 99% 反而表示可能有部分內容沒有充分快取(有的資料很冷門,幾乎沒人查)。
記憶體用量也要定期檢查。用 redis-cli 連進去查 info memory 可以看用了多少 RAM。如果接近 Redis 最大記憶體限制,需要考慮清理過期資料或增加記憶體。通常設定 Redis 的 maxmemory policy 為 allkeys-lru(淘汰最少用的鍵值),這樣自動清舊資料,避免記憶體爆滿。
多個 WordPress 網站共用同一個 Redis 也沒問題,只要設定不同的 prefix 隔離即可。比如網站 A 用前綴 siteA_,網站 B 用 siteB_,彼此完全獨立,不會互相影響。
最後是定期備份。Redis 可以設定持久化到硬碟(RDB 或 AOF 格式),這樣萬一伺服器重啟,快取資料不會全部丟光。雖然丟掉快取只是下一次查詢會重新建立,不是災難等級,但假如網站有重要的 session 資訊(比如購物車)存在 Redis,備份就很關鍵。在 2026 年,訪客對網站速度的耐心已經到極限,一秒延遲就會流失用戶,有效的快取架構是現代 WordPress 的基本配置。