技術架構 WordPress

WordPress Redis 物件快取:兩個有感但看不見的優化

每個 WordPress 站台有獨立 ACL 隔離的 Redis 物件快取,wp-cron 也從「靠訪客請求觸發」改成平台排程每 5 分鐘並行觸發。這兩個改動解決的是 WordPress 的兩個結構性問題。

RoamerHost 營運團隊 5 分鐘閱讀
想直接開始?WordPress 主機,60 秒自動部署 主機+網站+AI 三合一,年繳平均每月 NT$999 全包 — 60 秒上線。 立即訂閱 WordPress
本文目錄

這兩項優化使用者平常看不到,但它們解決的是 WordPress 兩個相當經典的結構性問題。

30 秒總覽

項目內容
物件快取在做什麼把重複的資料庫查詢結果記起來
誰最有感後台操作與商店網站
跟整頁快取的差別整頁快取救不了不能快取的頁面,物件快取可以
wp-cron 的問題預設靠訪客觸發,沒人來就不執行
要自己設定嗎不用

問題一:wp-cron 靠訪客請求觸發

WordPress 內建的排程系統 wp-cron 預設不是真的 cron。它是掛在頁面請求上的——有人瀏覽你的網站時,WordPress 才順便檢查有沒有到期的排程工作。

這帶來兩個問題:

  • 沒流量的站台,排程不會跑。你設定的定時發文、備份外掛、資料同步,在半夜沒訪客的時候通通停擺。
  • 有流量的站台,訪客要幫你等。觸發排程的那個倒楣訪客,他的頁面載入時間得算上排程工作的執行時間。

RoamerHost 的做法是停用頁面請求觸發,改由平台排程每 5 分鐘、以 10 站並行的方式主動觸發所有運行中站台的 wp-cron。結果是排程準時執行,而且執行成本不會轉嫁到訪客的載入時間上。

問題二:物件快取

WordPress 每次產生頁面都要對資料庫做大量查詢——選項、文章 meta、分類法、使用者資料。沒有物件快取時,這些查詢每次請求都重跑一遍。

RoamerHost 為每個站台提供 Redis 物件快取,並且做了逐站 ACL 隔離:每個站台有自己的 Redis 使用者與密碼,只能存取自己的鍵。

為什麼 ACL 隔離重要?因為共用 Redis 最典型的災難是:某個站台執行了 FLUSHDB,把所有站台的快取一起清光。事實上這正是 WP-CLI 的 wp redis enable 指令會做的事——它會呼叫 flushdb。RoamerHost 在啟用快取時刻意避開這個指令、改用其他方式寫入設定,就是為了不讓單一站台有能力影響其他站台。

這些對你的實際意義

如果你從別家主機搬過來,可能會注意到:

  • 後台操作變順(大量查詢被快取吃掉)
  • 定時發文真的準時(不再等訪客)
  • 你不需要另外裝物件快取外掛,也不需要自己架 Redis

需要注意的是:物件快取加速的是資料庫查詢,不是頁面快取。如果你要的是整頁靜態化,那是另一個層次的東西,可以搭配 LiteSpeed Cache 外掛使用——OpenLiteSpeed 對它有原生支援。

為什麼後台特別有感

前台可以靠整頁快取——頁面產生一次,之後大家看同一份現成的 HTML。

但後台不能快取。每次載入文章列表、開編輯器、看媒體庫,都是即時查詢資料庫。而 WordPress 後台的一次載入可能觸發數十甚至上百次查詢,其中很多是重複的。

物件快取把重複的部分記起來,所以它的效果在後台最明顯。這也是為什麼「前台正常但後台很慢」是物件快取最典型的適用情境。

wp-cron 為什麼要改

WordPress 的排程任務預設是「有訪客來訪時順便檢查該不該執行」。這個設計有兩個問題:

  • 沒有訪客就不執行。半夜的定時發文、備份排程可能整晚都沒跑。
  • 有訪客就一直檢查。流量大的時候,每次請求都多做一件事。

改成由系統層級的排程觸發,兩個問題一起解決——時間到就執行,跟有沒有訪客無關,也不佔用訪客的請求。

如果你曾經遇過「定時發文沒有準時發出」,原因九成是這個。

什麼情況下感覺不出差別

誠實講,有幾種網站裝了物件快取也沒什麼感覺:

  • 純靜態內容、文章數量少——本來就沒有多少查詢可以省
  • 整頁快取已經擋掉九成請求——訪客根本沒有觸發到資料庫
  • 你只在前台瀏覽,很少進後台——最有感的部分你用不到

會明顯有感的是另一種:外掛多、商品多、後台操作頻繁、或有不能快取的動態頁面。商店網站幾乎必然屬於這一類。

常見問題

Q:我需要自己裝外掛嗎?

不用,環境已經配好。這篇是解釋它在做什麼、以及為什麼你會有感。

Q:物件快取跟整頁快取有什麼不同?

整頁快取存的是「整個頁面的成品」,物件快取存的是「產生頁面過程中的中間結果」。前者對不能快取的頁面完全無效,後者仍然有幫助。商店的結帳頁就是典型例子。

Q:資料改了會不會顯示舊的?

不會。資料變動時對應的快取會失效,下次查詢會重新取得。

Q:為什麼我的定時發文還是沒準時?

先確認發布時間的時區設定,再看該篇的排程狀態。改用系統排程之後這類問題大幅減少,但錯誤的時區設定不是排程能修的。

Q:這會讓網站快多少?

沒有一個通用數字。影響最大的變數是你的網站有多少重複查詢——外掛多、商品多、查詢複雜的網站受益最大;一個十篇文章的部落格感覺不太出來。

託管環境幫你省掉的部分

自架的話,這一整套要自己來:裝 Redis、設定連線、裝對應的外掛、確認它真的生效、處理版本升級、監控記憶體用量。

其中最容易被低估的是「確認它真的生效」——裝了外掛不等於快取有在運作,設定錯了畫面完全看不出來,網站照跑,只是沒有變快。你要去看命中率才知道。

託管環境把這些配好並持續維護,這也是成本拆解那篇說的隱藏成本的一部分:不是裝設的那一小時,是往後每次升級與排查的時間。

資料來源與延伸連結

物件快取的行為以 Redis 與 WordPress 官方文件為準:

延伸閱讀

想找人幫你做?

需求做到外掛做不到的程度時,就需要有人動到程式碼。浪花科技承接 WordPress 高階開發:

準備好開始使用 WordPress 了嗎

完成訂閱後 60 秒,系統自動幫你裝好 WordPress——獨立容器、資源硬性上限不與他人共用、HTTPS 開箱即用。

年繳・無違約金・隨時可取消續約

嗨,我是小浪!有任何問題都歡迎點我詢問,我來幫你解答。

小浪

小浪 - AI小助手

在線中
小浪

有任何問題都歡迎隨時詢問我,我會盡力為你解答!

Powered by RoamerHost AI