Bỏ qua tới nội dung
Performance· ·10 phút đọc

Redis cache cho WordPress (object cache giảm tải truy vấn database)

Nguyen Hien
Redis cache cho WordPress (object cache giảm tải truy vấn database)
Cỡ chữ

Mỗi lần WordPress dựng một trang, nó hỏi MySQL hàng chục đến hàng trăm câu truy vấn (query): lấy bài viết, đọc cấu hình plugin, kiểm tra quyền người dùng, tải menu… Rất nhiều câu trong số đó lặp lại y hệt ở lần tải sau. Object cache (bộ nhớ đệm đối tượng) sinh ra để chặn sự lãng phí đó: kết quả truy vấn được giữ trong bộ nhớ, lần sau dùng lại ngay.

Mặc định WordPress chỉ có object cache không bền (non-persistent) — sống trong đúng một lần tải trang rồi biến mất. Redis biến nó thành bộ nhớ đệm bền (persistent), dùng chung giữa mọi lần tải và mọi người truy cập. Đây là nơi Redis cache WordPress phát huy giá trị.

Object cache khác page cache ở chỗ nào

Hai loại cache này dễ bị nhầm nhưng giải quyết hai bài toán khác nhau. Nếu bạn cần ôn lại bức tranh tổng quát các loại bộ nhớ đệm, xem bài server cache là gì và các loại cache phổ biến trước.

Tiêu chíPage cache (cache trang)Object cache (Redis)
Lưu cái gìCả trang HTML đã dựng xongKết quả từng truy vấn / đối tượng PHP
Phục vụ tốt choTrang TĨNH, khách vãng laiTrang ĐỘNG: admin, giỏ hàng, trang cá nhân
Có chạy PHP/MySQL khôngKhông — trả thẳng HTMLCó — nhưng bớt hỏi MySQL
Ai bỏ qua được nóUser đăng nhập, trang giỏ hàngKhông ai — nó nằm dưới mọi request

Điểm mấu chốt: page cache phục vụ rất tốt khách lạ xem bài tĩnh, nhưng người đăng nhập và trang giỏ hàng/thanh toán thường bị loại khỏi page cache (vì mỗi người thấy nội dung khác nhau). Đúng những trang đó lại phải chạy PHP + query đầy đủ — và đó chính là nơi Redis object cache vào cuộc.

Sơ đồ phân biệt object cache Redis lưu kết quả truy vấn database và page cache lưu cả trang HTML
Object cache lưu kết quả truy vấn database, khác page cache lưu cả trang HTML.

Redis tăng tốc cái gì cụ thể

Vì object cache nằm bên dưới page cache, nó chỉ giúp những request thực sự chạy PHP. Cụ thể:

  • Trang quản trị (wp-admin) nhẹ hẳn — admin gần như không bao giờ được page cache, nên mỗi lần tải đều phải query thật. Theo tài liệu nhà cung cấp và các bài đo thực tế, admin thường nhanh lên rõ rệt sau khi bật Redis.
  • WooCommerce: trang giỏ hàng, thanh toán, tài khoản — luôn động, luôn bỏ qua page cache.
  • Site nhiều plugin/nhiều truy vấn: mỗi query lặp được cắt bớt là bớt một nhịp chờ MySQL.

Hệ quả về tốc độ: Redis giảm thời gian máy chủ dựng trang, tức kéo TTFB (Time To First Byte — thời gian đến byte đầu tiên) xuống cho các request động. Muốn đào sâu cách hạ TTFB tổng thể, đọc kỹ thuật giảm TTFB chuyên sâu. Lưu ý quan trọng: TTFB tốt hơn góp phần cải thiện LCP (Largest Contentful Paint — thời điểm phần tử lớn nhất hiện ra), nhưng Redis không trực tiếp sửa các chỉ số phía trình duyệt như CLS hay INP.

Khi nào bạn THỰC SỰ cần Redis

Đây là phần hay bị bỏ qua, dẫn tới thất vọng “bật Redis mà chẳng nhanh hơn”. Lý do số một khiến Redis vô tác dụng là site không có gì để object cache giúp: nếu toàn bộ lưu lượng là khách lạ xem bài tĩnh và đã được page cache phủ kín, thì PHP gần như không chạy — Redis chẳng có việc gì làm.

NÊN cân nhắc Redis khi:

  • Site có nhiều người đăng nhập (forum, thành viên, nhiều biên tập viên cùng vào admin).
  • Chạy WooCommerce traffic cao — giỏ hàng và thanh toán động liên tục.
  • Catalog/blog rất lớn, truy vấn phức tạp, nhiều plugin nặng query.

CHƯA cần vội nếu site nhỏ, chủ yếu blog tĩnh, traffic vừa phải — lúc đó page cache và tối ưu máy chủ cho hiệu quả/đồng cao hơn nhiều.

Cách cài Redis object cache cho WordPress

Có hai phần tách biệt, và đây là chỗ hay vướng: plugin không tự tạo ra Redis. Plugin chỉ là cầu nối — máy chủ Redis phải được cài sẵn.

Bước 1 — Có một máy chủ Redis

Trên host được quản lý (managed hosting), thường bạn chỉ cần bật Redis trong bảng điều khiển. Trên VPS tự quản, cài gói máy chủ:

sudo apt install redis-server
sudo systemctl enable --now redis-server

Bạn cũng cần PHP nói chuyện được với Redis. Khuyến nghị dùng extension gốc PhpRedis (PECL) cho hiệu năng tốt; plugin có kèm sẵn thư viện Predis (thuần PHP) làm phương án dự phòng nếu chưa có extension.

Bước 2 — Cài plugin và khai báo kết nối

Cài plugin Redis Object Cache (tác giả Till Krüss). Khai báo thông số kết nối trong wp-config.php trước khi bật:

define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PASSWORD', 'mat-khau-redis-neu-co' );

// Tách key giữa các site dùng chung 1 Redis — tránh đụng nhau
define( 'WP_REDIS_PREFIX', 'web22_' );

Hằng WP_REDIS_PREFIX (tên cũ là WP_CACHE_KEY_SALT) rất quan trọng khi nhiều site dùng chung một máy chủ Redis: nó gắn tiền tố cho mọi key để các site không xoá nhầm cache của nhau.

Bước 3 — Bật drop-in

Vào Settings → Redis, bấm Enable Object Cache. Plugin sẽ đặt file object-cache.php vào thư mục wp-content/. File “drop-in” này chặn mọi lệnh wp_cache_get() / wp_cache_set() của WordPress và định tuyến sang Redis thay vì bộ nhớ đệm mặc định.

Sơ đồ các bước cài Redis object cache cho WordPress và đo cache hit ratio để xác nhận chạy thật
Cài Redis object cache rồi đo cache hit ratio để chắc nó chạy thật.

Đo xem Redis có thật sự chạy không

Đừng tin cảm giác — hãy nhìn số. Plugin hiển thị cache hit ratio (tỉ lệ trúng đệm) ngay trên dashboard. Quy tắc thực dụng: sau khi site chạy ấm (warmup) một lúc, hit ratio nên vượt 80%. Con số đó nghĩa là phần lớn yêu cầu lấy dữ liệu được Redis trả lại, không phải hỏi MySQL.

Kiểm tra nhanh ngoài plugin:

# Plugin đang dùng có ghi gì vào Redis không?
redis-cli INFO keyspace
redis-cli MONITOR   # xem lệnh chạy thực tế (Ctrl+C để thoát)

Nếu hit ratio thấp lè tè hoặc Redis trống trơn dù traffic cao, hãy kiểm tra lại: drop-in đã bật chưa, kết nối có lỗi xác thực không, và quan trọng nhất — site của bạn có loại request động nào để cache hay không.

Góc thực chiến từ web22.dev

Web22 vận hành web22.dev trên nền LiteSpeed + LiteSpeed Cache + Cloudflare. Với một blog/dịch vụ phần lớn là khách lạ xem trang tĩnh, page cache đã gánh gần hết — nên với hồ sơ traffic như vậy, đòn bẩy đáng làm trước là cache trang, font và ảnh, còn Redis chỉ thực sự “đáng tiền” khi tỉ trọng trang động (đăng nhập, giỏ hàng) tăng lên. Nguyên tắc: chọn đòn bẩy theo đúng hình dạng traffic của site, đừng bật mọi thứ chỉ vì nghe tên.

Câu hỏi thường gặp

Redis có thay thế plugin cache trang không?

Không. Hai loại làm hai việc khác nhau — object cache giảm tải database, page cache trả HTML tĩnh. Site nên dùng cả hai khi phù hợp.

Bật Redis xong mà không nhanh hơn, tại sao?

Thường vì site không có nhiều request động để cache (toàn trang tĩnh đã được page cache phủ), hoặc drop-in chưa kích hoạt đúng. Kiểm tra cache hit ratio để biết chắc.

Redis có cải thiện điểm Core Web Vitals không?

Gián tiếp. Nó hạ thời gian máy chủ (TTFB), giúp LCP tốt hơn cho trang động. Nó không sửa CLS hay INP — đó là việc của tối ưu phía trình duyệt.

Cần rà soát xem object cache, page cache và cấu hình máy chủ của site đã ăn khớp chưa, bạn có thể tham khảo dịch vụ tối ưu hiệu năng web của Web22.

Đọc tiếp

Bài viết
cùng chủ đề.

Tất cả bài viết