WordPress 為網路提供了巨大的動力,但它的流行凸顯了保持最佳效能的挑戰。提高 WordPress 效能的一個強大解決方案是 Redis 物件快取。使用這種記憶體鍵值資料庫作為快取,可以減少傳送到網站主資料庫的查詢次數。
本指南將向您介紹如何為 WordPress 網站安裝和使用 Redis 物件快取。
瞭解物件快取
載入 WordPress 頁面時,伺服器通常需要進行多次資料庫查詢,以獲取顯示頁面所需的內容、設定和其他資料。每次查詢都需要時間,隨著網站的增長,這些微小的延遲會導致明顯的速度減慢。
物件快取可以將這些資料庫查詢的結果儲存在記憶體中。快取會儲存您經常使用的查詢,並等待您的需要。
物件快取可以改變 WordPress 網站處理資料檢索和處理的方式,其影響不僅僅是簡單的速度提升。當網站流量突然激增時,例如在成功的營銷活動期間或病毒式社交媒體釋出之後,Redis 可以充當訪客和資料庫之間的緩衝區。
Redis 不會讓每個訪問者都觸發新的資料庫查詢,而是從記憶體中提供快取資料。這樣,網站就能在不降低效能的情況下,在整個網站上處理更多的併發使用者。
對於“黑五”的電子商務網站來說,Redis 快取的產品資訊可以減少資料庫負載,讓網站在不需要額外伺服器資源的情況下處理更多的流量。這種效率可以直接轉化為託管成本的節省,因為它可以利用現有的基礎設施為更多的訪問者提供服務。
WordPress如何使用資料庫
瞭解 WordPress 與其資料庫互動的方式有助於解釋為什麼快取在網站成長過程中變得至關重要。考慮一下當有人訪問網站主頁時會發生什麼。除非它響應的是頁面快取的結果,否則WordPress會協調資料庫查詢的複雜交響樂來構建一個動態頁面。
讓我們來看看一個典型的主頁載入過程:首先,WordPress 查詢 wp_options
表,獲取網站的設定、主題配置和活動外掛。
SequelAce 應用程式中的 wp_options 表。
如果側邊欄中有額外的小部件、區塊或元素,就會觸發額外的查詢。例如,“最近釋出的文章”部分需要文章資料,類別需要術語計數,任何搜尋功能都需要建立索引。
在 WordPress 網站編輯器中編輯側邊欄。
如果您使用的是頁面生成器外掛或其他複雜的主題,這些查詢將大大增加。動態內容的複雜性會更高。以常見的部落格設定為例,帖子會顯示作者資訊、類別、標籤和相關帖子:
WordPress 網站編輯器中的部落格文章佈局。
主頁上的每個帖子預覽都需要 WordPress 連線多個表中的資料。它從 wp_posts
中提取核心內容,從 wp_users
中獲取作者詳細資訊,並從 wp_postmeta
中收集後設資料。一個只顯示十個帖子預覽的主頁可能要執行幾十個獨立的資料庫查詢。
WordPress資料庫的瓶頸
這種資料庫架構還揭示了影響效能的常見瓶頸。自定義文章型別雖然在組織內容方面功能強大,但通常需要依賴 wp_postmeta
來儲存附加欄位。
有些網站(比如網上商店或房地產目錄)可能會在每次頁面載入時進行數百次查詢,僅僅是為了顯示每個產品或房產。每種產品或房產都必須作為單獨的後設資料條目顯示各自的詳細資訊,如面積、數量、價格、臥室、變化等。
wp_options
表可能成為另一個瓶頸。這是因為它將儲存提供這些設定的任何外掛的設定。
如果考慮到併發訪問者的因素,這種影響會變得更加明顯。每個使用者都會觸發自己的查詢集,WordPress 將對每個查詢進行獨立處理。在流量激增時,這種處理會造成瓶頸,從而拖慢整個網站的執行速度。
這些資料庫互動使得快取變得非常重要。如果正確實施 Redis 物件快取,它就能攔截這些重複查詢,並將結果儲存在記憶體中。WordPress 可以直接從 Redis 中檢索預處理過的資料,而不是為每個訪問者執行多個連線和後設資料查詢。這樣,WordPress 往往可以將數十次資料庫查詢減少到一次快取查詢。
WordPress物件快取的熱門選擇
說到 WordPress 的物件快取解決方案,有多種選擇。並不是每個主機都支援所有選項,這意味著您需要確保您選擇的物件快取能滿足您的需求。
Memcached 是歷史最悠久、應用最廣泛的快取系統之一。它是一種分散式記憶體快取系統,簡單而有效。由於歷史悠久,它得到了很多支援,而且在資源使用方面通常很輕便。憑藉良好的支援和文件,Memcached 是各級物件快取的流行解決方案。
Memcached 網站
由於 Memcached 注重易用性,因此這種簡單的鍵值儲存可能不適合更復雜的應用場景。此外,它也不提供 “持久 ”儲存,這意味著當下一個頁面載入時,它就會清除。
Couchbase 可以提供更復雜的解決方案,它結合了文件資料庫功能、典型的鍵值儲存功能和內建叢集功能。後一種技術可以自動進行資料分組,以提高效能–類似於 Windows 磁碟碎片整理程式提高作業系統磁碟效能的方式。
Couchbase 網站
不過,Couchbase 的鍵值儲存是其文件驅動架構的次要部分。如果您需要減少查詢限制並提高資料驗證和一致性的準確性,這可能會成為一個問題。
Redis為何在WordPress中脫穎而出
對於 WordPress 而言,Redis 與其他直接競爭者相比具有多項優勢。與 Memcached 不同,Redis 支援複雜的資料結構,如列表、集合和排序集合。這很好地滿足了 WordPress 的資料組織需求,併為您提供了一種方法來擴充套件更大、更復雜的設定。
在使用這些不同的結構時,Redis 的“原子操作(atomic operation)”至關重要。簡而言之,它使用事務的概念,將各種命令組合在一起一次性執行。實際功能比這更復雜,但原子操作通常能確保資料的一致性,這對任何 WordPress 網站來說都至關重要。
在 WordPress 中使用 Redis 還有兩個好處:
- 永續性。Redis 可以將資料持久化到磁碟上。與記憶體解決方案相比,這提供了更好的資料永續性。
- 更好的記憶體管理。與其他快取工具相比,Redis 提供了更復雜的記憶體管理選項。這能讓你更好地控制物件快取的行為。
Redis 的應用超出了物件快取的範圍,但對於 WordPress 來說,資料庫解決方案的獨特構成意味著它的鍵值儲存幾乎是一個理想的合作伙伴。
WordPress和Redis之間的關係
WordPress 通過 WP_Object_Cache
函式提供了自己的物件快取功能。它的核心功能是作為網站程式碼和資料庫之間的中間層,使用標準化函式來管理快取資料。
當外掛或主題請求資料時,WordPress 會首先使用這些內建函式檢查物件快取中是否存在資料。例如,以下程式碼用於檢索使用者的評論數:
function get_user_comment_count($user_id) { // Generate a unique cache key $cache_key = 'user_comment_count_' . $user_id; // Try to get the value from cache first $comment_count = wp_cache_get($cache_key, 'user-stats'); // If not in cache, query the database if (false === $comment_count) { global $wpdb; $comment_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->comments WHERE user_id = %d", $user_id ) ); // Store the result in cache for future requests wp_cache_set($cache_key, $comment_count, 'user-stats', 3600); // Cache for 1 hour } return $comment_count; }
當與 Redis 正確配置後,該功能會攔截資料庫請求,並在 WordPress 查詢資料庫之前檢查 Redis 快取中是否存在所需的資料。
這種整合超越了簡單的鍵值儲存。Redis處理複雜資料結構的能力反映了WordPress的分層內容組織。例如,當 WordPress 需要檢索複雜的查詢結果(如父頁面的所有子頁面及其相關後設資料)時,Redis 會將整個資料結構儲存為單個快取條目。
這種整合可以大大提高效能。Redis 將所有資料儲存在記憶體中,這意味著訪問時間以微秒為單位,而不是資料庫查詢通常所需的毫秒。這看起來並不重要,但對於資料庫使用量大的網站來說,這種差異可以使頁面載入時間快兩到三倍。
WordPress 的物件快取還通過額外配置支援高階 Redis 功能。例如,您可以實施快取標籤,進行更精細的快取管理:
function get_category_posts($category_id) { $cache_key = 'category_posts_' . $category_id; $posts = wp_cache_get($cache_key, 'category-posts'); if (false === $posts) { $posts = get_posts(array( 'category' => $category_id, 'posts_per_page' => 10 )); wp_cache_set( $cache_key, $posts, 'category-posts', 3600, array( 'tags' => array( 'category_' . $category_id, 'front_page_content' ) ) ); } return $posts; } // Later, when a post in this category updates: wp_cache_delete_by_tag('category_' . $category_id);
WordPress 與 Redis 之間的這種關係建立了一個功能強大的快取系統,可在保持資料一致性的同時智慧地管理資料永續性。WP_Object_Cache
函式可確保您的所有外掛和主題都能受益於 Redis 快取,而無需直接實施。此外,Redis 的高階功能還能為複雜的 WordPress 安裝提供所需的靈活性。
如何在WordPress主機上安裝Redis
雖然 Redis 是建立物件快取的常用方法,但並非每個主機都提供訪問或整合功能。這意味著你可能需要在伺服器上動手編寫程式碼。
每個虛擬主機都有不同的方法來實現這一點,有些甚至不提供所需的 root 訪問許可權。不過,典型的步驟包括準備伺服器、安裝 Redis,然後配置 WordPress 以使用它。
準備和安裝伺服器
安裝 Redis 需要一個正確配置的伺服器環境。對於某些 WordPress 主機來說,這可能意味著你要選擇一個合適的計劃。一般的共享主機,甚至是託管級別的主機,都很可能無法安裝 Redis。虛擬專用伺服器(VPS)將是您努力的起點,但專用雲主機將是理想的選擇。
無論如何,你的 PHP 安裝都需要 phpredis 擴充套件。安裝後,Redis 就能與 PHP 一起工作了,這對於與 WordPress 一起工作也是必不可少的。你需要使用特定的編譯標誌和配置選項,這些選項有很多。
在 Ubuntu 系統上,使用以下命令安裝所需的元件:
sudo apt-get update sudo apt install redis server
安裝過程完成後,執行 sudo service redis status
檢查 Redis 是否按預期方式執行。你可能還想執行 redis-cli --version
來檢查安裝是否按預期完成。
伺服器上執行 Redis 後,就可以安裝 phpredis
擴充套件了:
sudo apt-get install php-redis sudo phpenmod redis
以上就是安裝 Redis 所需的全部步驟,但仍需根據伺服器和可用資源配置 Redis。
Redis配置
在讓 Redis 開始在你的網站上執行之前,你需要注意 Redis 伺服器配置檔案。首要任務是瞭解 WordPress 和 Redis 是否工作在同一臺伺服器上。通常情況下是這樣,所以你需要繫結本地主機地址(127.0.0.1
)。
你可以選擇任何編輯器來訪問 Redis 配置檔案,但 nano 最合適不過了,它幾乎可以在你找到的所有伺服器例項上使用:
sudo nano /etc/redis/redis.conf
在大多數情況下,你可以找到正確的行,並在儲存更改之前取消註釋:
bind 127.0.0.1 ::1 # listens on loopback IPv4 and IPv6
您可能需要進一步修改該配置檔案。以下是 WordPress 網站的最佳設定:
maxmemory 256mb maxmemory-policy allkeys-lru appendonly yes appendfsync everysec save 900 1 save 300 10 save 60 10000
每種配置選擇都有其特定用途:
- 256MB 的
maxmemory
設定為大多數 WordPress 安裝提供了一個良好的起點。這一設定可防止 Redis 佔用過多系統記憶體,同時保持足夠的快取空間,從而顯著提高效能。 allkeys-lru maxmemory-policy
可確保最常訪問的內容保留在快取中。有些網站則更傾向於使用volatile-lru
,尤其是在快取會話資料和常規內容時。appendonly
和appendfsync
設定管理 Redis 的持久化行為。雖然 Redis 主要用作快取,但保持永續性可以防止伺服器重啟時快取完全丟失。everysec
設定可在效能和資料安全之間取得平衡。
save
指令控制 Redis 何時建立資料集的時間點快照。示例配置告訴 Redis 儲存
- 每次更改後,每 15 分鐘儲存一次。
- 10 次更改後每 5 分鐘儲存一次
- 10,000 次更改後每分鐘儲存一次。
這些持久化設定有助於保持快取效率,同時防止資料丟失。
配置Redis安全性並測試更改
在這裡,你還應該關注安全性。例如,你可以使用 requirepass
命令設定密碼驗證,甚至可以重新命名“危險”命令。Redis 訪問控制列表(ACL)對某些破壞性命令進行了限制,你應該檢視整個列表,看看是否有任何命令會對你產生影響。
完成所有這些步驟後,最好測試一下 Redis 伺服器的效能。Redis CLI 為此提供了多個基準命令:
redis-cli --latency redis-cli info | grep used_memory_human redis-cli info | grep connected_clients
簡而言之,它們為持續監控建立了基準效能指標,應成為定期維護工作流程的一部分。
配置WordPress
一旦伺服器上執行了 Redis,就需要對 WordPress 進行配置,將其用作物件快取。配置通常包括指定 Redis 連線的詳細資訊,如主機、埠和任何身份驗證憑據。
你可以手動將適當的物件快取外掛檔案新增到 wp-content
目錄中,不過安裝一個專用的 Redis 物件快取外掛可能是實現這一目標的最佳方式。我們在此推薦的唯一一款外掛就是上文提到的 Redis 物件快取外掛。Redis Object Cache 外掛更像是一個將 WordPress 連線到鍵值儲存的輔助工具。
安裝之外的Redis管理
典型的 Redis 物件快取安裝提供了對 Redis CLI 的訪問。
基本監控
該命令列介面具有強大的功能,可讓您連線到 Redis 例項,並立即瞭解快取的執行情況。例如,你可以揭示快取資料模式、分析記憶體使用情況,並實時執行維護任務。
對於基本的監控,有幾個基本命令需要注意:
redis-cli INFO stats # View cache hits and misses redis-cli INFO memory # Check memory utilization redis-cli MONITOR # Watch live cache operations
MONITOR
命令可實時流式傳輸快取操作,準確顯示 WordPress 與 Redis 的互動情況。這種可見性可以幫助你識別快取模式和優化機會。SLOWLOG
命令可識別有問題的查詢:
redis-cli SLOWLOG GET 10 # View the 10 slowest recent operations redis-cli SLOWLOG RESET # Clear the slow log for fresh monitoring
你還可以選擇更多 Redis 功能。
更深入的Redis監控命令
控制資源的一個簡單方法是監控 Redis 的連線限制。這是防止資源耗盡的絕佳方法:
redis-cli CLIENT LIST | wc -l # Count active connections redis-cli CONFIG GET maxclients # Check maximum allowed connections
WordPress 使用 Redis 來加快資料庫的讀取速度。快取條目是持久的,將來可以再次快取。為了支援這一點,Redis 為其儲存的鍵支援“驅逐策略”。
不過,這也會帶來記憶體壓力方面的弊端。較低的“命中率”(將總運算元與對現有鍵的運算元進行比較)就是證明,因此跟蹤以下指標至關重要:
redis-cli INFO stats | grep evicted_keys redis-cli INFO stats | grep hit_rate
如果你發現你的資料庫確實存在記憶體壓力,你可以選擇增加可用記憶體、優化任何金鑰過期策略並實施選擇性快取策略。具體方法取決於你的網站和記憶體壓力。
使用 Redis 的圖形使用者介面
使用 Redis 命令和 CLI,你還能發現更多東西。這就是 Redis Insight 應用程式的用武之地。
Redis Insight GUI 應用程式
它提供了一個圖形使用者介面來檢視 Redis 物件快取,無需終端、伺服器訪問或命令列操作。就像使用 TablePlus 或 SequelAce 等工具檢視 WordPress 資料庫一樣,Redis Insight 等應用程式可以快速設定,並簡化工作流程。
常見的Redis挑戰和解決方案
大多數情況下,你的 Redis 安裝無需進一步維護即可正常工作。不過,有些 Redis 實施可能會帶來一些挑戰,需要你加以注意。例如,你可能會遇到 WordPress 無法檢測到合適連線外掛的警告。
當你選擇使用 Redis Object Cache 以外的外掛時,就會出現這種情況,在絕大多數情況下都可以忽略。但請注意,Redis 的最佳執行依賴於合適的連線外掛。
例如,在 APM 工具中進行分析時,你可能看不到正確的指標。如果構建一個自定義 Redis 例項,就可以解決這個問題。
瞭解 Redis 整合的侷限性也是一個好主意。例如,在使用非典型 WordPress 安裝型別時,你可能會看到各種錯誤。
小結
Redis 物件快取通過高效的資料儲存和檢索,為 WordPress 網站帶來了強大的效能提升。成功的關鍵在於正確實施、定期監控和維護。
Redis 實施的每個階段都建立在前一個階段的基礎上。首先,從正確的伺服器配置開始。然後,與 WordPress 整合。最後,通過定期監控和優化,保持效能提升。這種方法將幫助您建立一個強大的快取基礎設施。
評論留言