WordPress Redis object cache là một trong những cách thực tế nhất để tăng tốc WordPress khi website bắt đầu có nhiều truy vấn database, plugin nặng, WooCommerce, membership hoặc traffic tăng đột biến. Page cache giúp trả HTML nhanh cho khách chưa đăng nhập, nhưng object cache xử lý lớp sâu hơn: cache kết quả truy vấn, option, transient và object nội bộ để giảm tải MySQL/MariaDB.
Bài này đi theo góc nhìn vận hành production: khi nào nên dùng Redis, cách dựng Redis an toàn, cấu hình WordPress, kiểm tra bằng WP-CLI, đo hiệu quả, xử lý lỗi thường gặp và checklist nghiệm thu trước khi bật trên site thật. Lab giả định máy chủ Ubuntu 22.04/24.04 hoặc Debian, Nginx/Apache + PHP-FPM, WordPress đang chạy ổn, bạn có quyền SSH sudo và wp-admin.
1. Object cache khác gì page cache?
Page cache lưu lại toàn bộ HTML của trang đã render. Khi user chưa đăng nhập truy cập bài viết, plugin page cache có thể trả HTML ngay mà không cần PHP xử lý nhiều. Object cache thì khác: nó lưu các object ở tầng ứng dụng, ví dụ kết quả get_option(), WP_Query, metadata, transient hoặc dữ liệu plugin.
- Page cache: giảm thời gian render trang public.
- Object cache: giảm truy vấn database trong cả wp-admin, user đăng nhập, WooCommerce cart/checkout và API.
- Opcode cache: PHP OPcache lưu bytecode PHP, không thay thế Redis.
Với website nhỏ ít plugin, Redis có thể chưa tạo khác biệt lớn. Nhưng với site có WooCommerce, LMS, membership, nhiều custom query hoặc backend chậm, Redis thường cải thiện rõ số lượng database query và thời gian phản hồi.
2. Khi nào nên triển khai WordPress Redis object cache?
Nên cân nhắc Redis khi bạn thấy một hoặc nhiều dấu hiệu sau:
- MySQL CPU cao dù web server chưa quá tải.
- wp-admin chậm, nhất là trang sản phẩm, đơn hàng, báo cáo.
- Plugin Query Monitor cho thấy nhiều query lặp lại.
- WooCommerce checkout/cart không hưởng lợi nhiều từ page cache.
- Website có nhiều user đăng nhập hoặc gọi REST API thường xuyên.
- Database đặt trên server riêng hoặc managed database có latency.
Không nên bật Redis chỉ vì “nghe nói nhanh” mà không đo baseline. Trước khi thay đổi, hãy ghi lại TTFB, số query, CPU/RAM database và thời gian tải wp-admin để có bằng chứng so sánh.
3. Kiến trúc khuyến nghị cho production
Mô hình đơn giản nhất là Redis chạy cùng server với WordPress và chỉ listen trên localhost:
Browser/CDN -> Nginx/Apache -> PHP-FPM -> WordPress
|-> Redis 127.0.0.1:6379
|-> MySQL/MariaDB
Với nhiều web node, Redis nên là dịch vụ riêng trong private network, có firewall, password/TLS nếu cần và monitoring rõ ràng. Không bao giờ mở Redis trực tiếp ra Internet.
4. Cài Redis an toàn trên Ubuntu/Debian
4.1. Cài package
sudo apt-get update
sudo apt-get install -y redis-server redis-tools
redis-server --version
Output mẫu:
Redis server v=7.0.15 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64
4.2. Cấu hình chỉ nghe localhost
sudo grep -E '^(bind|protected-mode|port|maxmemory|maxmemory-policy)' /etc/redis/redis.conf
Thiết lập tối thiểu nên có:
bind 127.0.0.1 ::1
protected-mode yes
port 6379
maxmemory 256mb
maxmemory-policy allkeys-lru
maxmemory cần tùy RAM server. Với VPS 2GB, 128–256MB là mức khởi đầu an toàn. Với server lớn hoặc nhiều site, có thể tăng nhưng phải để đủ RAM cho OS, PHP-FPM và database. allkeys-lru cho phép Redis loại bỏ key ít dùng khi đầy, phù hợp cache hơn là để Redis ăn hết RAM.
4.3. Restart và kiểm tra
sudo systemctl enable --now redis-server
sudo systemctl restart redis-server
systemctl status redis-server --no-pager
redis-cli ping
# output: PONG
Nếu redis-cli ping không trả PONG, chưa nên cấu hình WordPress. Hãy xử lý service trước.
5. Cấu hình WordPress dùng Redis
5.1. Cài plugin object cache
Plugin phổ biến và thực chiến là Redis Object Cache. Có thể cài bằng wp-admin hoặc WP-CLI:
cd /var/www/html
wp plugin install redis-cache --activate
wp plugin status redis-cache
Nếu chạy WP-CLI bằng root trên server, thêm --allow-root khi thật sự cần. Tốt hơn là chạy dưới user sở hữu code WordPress.
5.2. Thêm cấu hình vào wp-config.php
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_CACHE_KEY_SALT', 'sysadminskills-prod:');
WP_CACHE_KEY_SALT rất quan trọng nếu một Redis instance phục vụ nhiều website. Mỗi site cần salt riêng để tránh đụng key cache.
5.3. Bật drop-in object-cache.php
wp redis enable
wp redis status
Output tốt thường có các dòng tương tự:
Status: Connected
Client: PhpRedis
Drop-in: Valid
Ping: PONG
Nếu báo Drop-in: Missing, plugin chưa tạo được file wp-content/object-cache.php. Kiểm tra quyền ghi thư mục wp-content.
6. Cài extension PHP Redis để tăng hiệu năng
Plugin có thể dùng Predis thuần PHP, nhưng production nên dùng extension php-redis nếu tương thích stack.
sudo apt-get install -y php-redis
php -m | grep -i redis
sudo systemctl restart php8.2-fpm # đổi version theo server
wp redis status
Với nhiều version PHP, hãy chắc extension được cài đúng version mà PHP-FPM đang dùng. Kiểm tra bằng:
php -v
systemctl list-units 'php*-fpm.service'
php-fpm8.2 -m | grep -i redis
7. Đo hiệu quả trước và sau
7.1. Baseline bằng curl
for i in 1 2 3 4 5; do
curl -o /dev/null -s -w 'time_total=%{time_total} ttfb=%{time_starttransfer}
' https://example.com/
done
Page cache có thể che mất hiệu quả Redis ở frontend. Hãy đo thêm URL wp-admin hoặc endpoint động chỉ accessible nội bộ nếu có.
7.2. Theo dõi Redis hit/miss
redis-cli info stats | egrep 'keyspace_hits|keyspace_misses'
redis-cli info memory | egrep 'used_memory_human|maxmemory_human|mem_fragmentation_ratio'
Sau khi warm-up, hit tăng dần là tín hiệu tốt. Nếu miss luôn cao, cache có thể bị flush liên tục, key salt sai, plugin không dùng object cache hoặc workload không phù hợp.
7.3. Dùng Query Monitor
Trên staging hoặc production có kiểm soát, plugin Query Monitor giúp xem số database query và object cache stats. Không nên để mọi plugin debug bật vĩnh viễn trên production nếu gây overhead hoặc lộ thông tin.
8. Vận hành Redis trong production
8.1. Memory limit và eviction
Redis cache phải có giới hạn RAM. Nếu không đặt maxmemory, server có thể swap hoặc OOM khi traffic tăng. Kiểm tra định kỳ:
redis-cli info memory
redis-cli config get maxmemory
redis-cli config get maxmemory-policy
8.2. Monitoring bằng systemd và log
journalctl -u redis-server -n 100 --no-pager
systemctl is-active redis-server && echo REDIS_OK || echo REDIS_FAIL
Nên có cảnh báo khi Redis down, memory gần max, evicted_keys tăng bất thường hoặc PHP error log xuất hiện lỗi kết nối Redis.
8.3. Backup có cần Redis không?
Với object cache, Redis là dữ liệu tạm. Thường không cần backup RDB/AOF cho cache WordPress. Điều quan trọng là database WordPress và file upload. Nếu Redis mất dữ liệu, website chỉ cần build cache lại. Vì vậy đừng thiết kế Redis cache như nguồn dữ liệu duy nhất.
9. Troubleshooting lỗi thường gặp
9.1. Plugin báo “Redis server is unreachable”
- Chạy
redis-cli pingtrên server. - Kiểm tra Redis có bind localhost không:
ss -lntp | grep 6379. - Kiểm tra
WP_REDIS_HOST, port, password nếu có. - Kiểm tra firewall nếu Redis nằm trên server riêng.
9.2. wp-admin lỗi sau khi bật Redis
Rollback nhanh:
wp redis disable
rm -f wp-content/object-cache.php
sudo systemctl restart php8.2-fpm
Sau rollback, kiểm tra error log:
tail -100 /var/log/nginx/error.log
tail -100 /var/log/php8.2-fpm.log
9.3. Dữ liệu hiển thị cũ hoặc giỏ hàng bất thường
- Flush cache có kiểm soát:
wp cache flush. - Kiểm tra plugin thương mại có tương thích persistent object cache không.
- Đảm bảo mỗi site có
WP_CACHE_KEY_SALTriêng. - Kiểm tra multisite nếu đang dùng network WordPress.
9.4. Redis đầy RAM và evicted_keys tăng liên tục
redis-cli info stats | grep evicted_keys
redis-cli --bigkeys
Nếu key quá lớn đến từ một plugin, cần xem lại plugin đó. Không phải cứ tăng RAM là đúng; đôi khi phải giảm transient khổng lồ, sửa query hoặc loại plugin gây cache bloat.
10. Checklist nghiệm thu
- Redis chỉ listen private/localhost, không public Internet.
protected-mode yesvà firewall đúng.- Đã đặt
maxmemoryvàmaxmemory-policy. - WordPress có
WP_CACHE_KEY_SALTriêng. wp redis statusbáo Connected và Drop-in Valid.- Đã đo baseline trước/sau: TTFB, query count, MySQL CPU.
- Đã test wp-admin, login, WooCommerce cart/checkout nếu có.
- Có rollback command rõ ràng:
wp redis disablevà xóa drop-in. - Có monitoring Redis service, memory, evicted keys và PHP error log.
- Đã ghi lại thay đổi vào runbook vận hành.
11. Lab thực hành
- Dựng WordPress staging hoặc bản clone local.
- Cài Redis, giới hạn
maxmemory 128mb, bậtallkeys-lru. - Cài plugin Redis Object Cache và bật bằng WP-CLI.
- Chạy
redis-cli monitortrong 30 giây khi mở wp-admin để quan sát key. - So sánh
keyspace_hits/keyspace_missestrước và sau khi truy cập 10 trang. - Tắt Redis service, quan sát lỗi, rồi rollback bằng
wp redis disable.
Kết luận
WordPress Redis object cache không phải nút “turbo” bật lên là xong. Nó là một thành phần hạ tầng cần giới hạn RAM, bảo mật network, đo hiệu quả và có rollback. Khi triển khai đúng, Redis giúp WordPress giảm tải database, cải thiện wp-admin và ổn định hơn trong traffic cao. Khi triển khai ẩu, nó có thể tạo lỗi khó đoán hoặc tiêu thụ RAM quá mức. Hãy bắt đầu từ staging, đo baseline, bật có kiểm soát và đưa vào checklist vận hành.
