WordPress là ứng dụng PHP truy vấn cơ sở dữ liệu liên tục. Mỗi lượt tải trang, PHP phải biên dịch mã nguồn và WordPress phải đọc nhiều tùy chọn, metadata từ MySQL. Hai lớp cache giúp giảm việc lặp lại này là Redis Object Cache (lưu kết quả truy vấn trong RAM) và OPcache (lưu bytecode PHP đã biên dịch). Bài này hướng dẫn bật cả hai để tăng tốc WordPress trên VPS Ubuntu và cách kiểm tra từng lớp có thực sự hoạt động.
Hướng dẫn giả định bạn đã có WordPress chạy trên Nginx, PHP-FPM và MariaDB. Nếu chưa, xem bài cài LEMP cho WordPress trên Ubuntu. Ví dụ dùng PHP 8.3 mặc định của Ubuntu 24.04. Nếu bạn dùng phiên bản khác, thay 8.3 trong đường dẫn cho phù hợp.
Hai lớp cache làm việc gì
| Tiêu chí | OPcache | Redis Object Cache |
|---|---|---|
| Tầng hoạt động | PHP (Zend Engine) | WordPress (WP_Object_Cache) |
| Lưu gì | Bytecode của file PHP đã biên dịch | Kết quả truy vấn, options, transients, metadata |
| Nơi lưu | Bộ nhớ chia sẻ của PHP-FPM | RAM của dịch vụ Redis |
| Cần plugin | Không | Có, cần drop-in object-cache.php |
| Phạm vi | Mọi ứng dụng PHP trên máy | Từng site WordPress |
Mặc định WordPress có object cache nhưng chỉ tồn tại trong một request, hết request là mất. Khi có drop-in kết nối Redis, cache được giữ lại giữa các request. Điều này đặc biệt có ích với trang quản trị, WooCommerce và trang dành cho người đã đăng nhập, là những nơi cache toàn trang thường bị bỏ qua.
Phần 1: Bật và cấu hình OPcache
Kiểm tra OPcache đã được cài chưa
Trên Ubuntu, OPcache thường có sẵn khi cài PHP-FPM. Kiểm tra extension:
php -m | grep -i opcache
ls /etc/php/8.3/fpm/conf.d/ | grep opcache
Nếu chưa có, cài thêm gói:
sudo apt install php8.3-opcache -y
Cấu hình opcache.ini
Mở file cấu hình của module:
sudo nano /etc/php/8.3/mods-available/opcache.ini
Thêm các dòng sau dưới dòng zend_extension=opcache.so. Các giá trị dưới đây dựa trên mục "Recommended php.ini settings" trong tài liệu PHP. Riêng max_accelerated_files được nâng từ mức gợi ý 4000 lên 10000 vì WordPress có nhiều plugin thường có rất nhiều file PHP:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
| Chỉ thị | Ý nghĩa |
|---|---|
opcache.memory_consumption | Dung lượng bộ nhớ chia sẻ (MB) để chứa bytecode |
opcache.interned_strings_buffer | Bộ nhớ (MB) cho chuỗi dùng chung giữa các script |
opcache.max_accelerated_files | Số file tối đa được cache. WordPress nhiều plugin có thể có hàng nghìn file PHP |
opcache.validate_timestamps | 1 là kiểm tra file có thay đổi hay không, 0 là bỏ qua kiểm tra |
opcache.revalidate_freq | Bao lâu (giây) thì kiểm tra lại thời gian sửa file |
Với WordPress, nên giữ validate_timestamps=1. WordPress tự cập nhật plugin, theme và core qua giao diện quản trị. Nếu đặt về 0, PHP sẽ tiếp tục chạy bytecode cũ cho đến khi bạn reload PHP-FPM, dễ gây lỗi khó hiểu sau khi cập nhật.
Áp dụng thay đổi:
sudo php-fpm8.3 -t
sudo systemctl reload php8.3-fpm
Kiểm tra OPcache đang hoạt động
Lưu ý quan trọng: lệnh php -i chạy bằng PHP CLI, có file cấu hình riêng. Kết quả CLI không phản ánh PHP-FPM đang phục vụ website. Để kiểm tra đúng, hãy chạy qua web. Tạo một file tạm với tên khó đoán trong thư mục web:
sudo nano /var/www/tenmien.vn/opc-check-7f3a.php
<?php
$s = opcache_get_status(false);
header('Content-Type: text/plain');
echo 'enabled: ', var_export($s['opcache_enabled'], true), PHP_EOL;
echo 'cached scripts: ', $s['opcache_statistics']['num_cached_scripts'], PHP_EOL;
echo 'hits: ', $s['opcache_statistics']['hits'], PHP_EOL;
echo 'misses: ', $s['opcache_statistics']['misses'], PHP_EOL;
echo 'used memory: ', $s['memory_usage']['used_memory'], PHP_EOL;
echo 'free memory: ', $s['memory_usage']['free_memory'], PHP_EOL;
Mở file trên trình duyệt vài lần. Nếu enabled là true và số hits tăng dần sau mỗi lượt tải trang WordPress, OPcache đang hoạt động. Nếu free memory gần hết hoặc số script đã cache chạm max_accelerated_files, hãy tăng hai giá trị tương ứng. Kiểm tra xong, xóa file ngay:
sudo rm /var/www/tenmien.vn/opc-check-7f3a.php
Phần 2: Cài Redis và Redis Object Cache
Cài Redis server và extension PHP
sudo apt install redis-server php8.3-redis -y
sudo systemctl enable --now redis-server
redis-cli ping
Nếu lệnh cuối trả về PONG, Redis đã chạy. Gói php8.3-redis cung cấp extension PhpRedis, giúp plugin kết nối Redis trực tiếp. Reload PHP-FPM sau khi cài:
sudo systemctl reload php8.3-fpm
Cấu hình Redis cho vai trò cache
Mở /etc/redis/redis.conf và kiểm tra các dòng sau:
bind 127.0.0.1 -::1
protected-mode yes
maxmemory 128mb
maxmemory-policy allkeys-lru
bindgiới hạn Redis chỉ nghe trên localhost. Không mở Redis ra Internet.maxmemoryđặt mức RAM tối đa Redis được dùng. Chọn giá trị phù hợp với tổng RAM của VPS.allkeys-lrucho phép Redis tự xóa khóa ít dùng nhất khi chạm giới hạn, phù hợp khi Redis chỉ làm cache.
sudo systemctl restart redis-server
Cài plugin Redis Object Cache
Thêm các hằng số vào wp-config.php, đặt phía trên dòng /* That's all, stop editing! */:
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_DATABASE', 0 );
define( 'WP_REDIS_PREFIX', 'tenmien_vn:' );
define( 'WP_REDIS_TIMEOUT', 1 );
define( 'WP_REDIS_READ_TIMEOUT', 1 );
Theo README của plugin, giá trị mặc định là host 127.0.0.1, cổng 6379, database 0 và timeout 1 giây. Nếu VPS có nhiều site WordPress, mỗi site cần WP_REDIS_PREFIX khác nhau.
Cài và bật plugin bằng WP-CLI (chạy với user sở hữu thư mục web):
cd /var/www/tenmien.vn
sudo -u www-data wp plugin install redis-cache --activate
sudo -u www-data wp redis enable
Lệnh wp redis enable chép file drop-in object-cache.php vào wp-content. Bạn cũng có thể làm trong giao diện: vào Settings, chọn Redis, bấm Enable Object Cache.
Kiểm tra Redis Object Cache đang hoạt động
Cách 1, dùng WP-CLI:
sudo -u www-data wp redis status
Kết quả cần có trạng thái Connected và drop-in hợp lệ. Nếu báo không kết nối được, kiểm tra Redis có chạy không và extension redis đã được nạp trong PHP-FPM chưa.
Cách 2, xem số khóa và tỷ lệ trúng cache trực tiếp trong Redis:
redis-cli info keyspace
redis-cli info stats | grep -E 'keyspace_hits|keyspace_misses'
redis-cli --scan --pattern 'tenmien_vn:*' | head
Sau khi duyệt vài trang, số khóa phải tăng và keyspace_hits tăng dần. Bạn cũng có thể chạy redis-cli monitor rồi tải một trang để thấy các lệnh GET/SET chạy theo thời gian thực. Lệnh monitor tốn tài nguyên, chỉ nên dùng ngắn rồi bấm Ctrl+C.
Cách 3, trang Settings > Redis trong WordPress hiển thị trạng thái kết nối và biểu đồ số liệu của plugin.
Lưu ý khi vận hành
- Xóa cache khi cần: chạy
wp cache flushhoặc bấm Flush Cache trong trang Settings > Redis nếu dữ liệu hiển thị bị cũ sau khi chỉnh trực tiếp cơ sở dữ liệu. - Theo dõi RAM: Redis, OPcache, PHP-FPM và MariaDB cùng dùng RAM. Theo dõi bằng
free -hvàhtop, xem thêm bài tạo swap và theo dõi tài nguyên VPS. - Không cần sao lưu Redis: khi Redis chỉ làm cache, dữ liệu có thể mất mà không ảnh hưởng tính đúng đắn của site.
- Tắt khi gỡ lỗi: nếu nghi cache gây lỗi, chạy
wp redis disableđể gỡ drop-in, site sẽ quay về object cache mặc định.
Hai lớp cache này cần VPS có quyền root và đủ RAM. Canh Deal đề xuất gói VPS SALE 2-2 của TDCloud giá 599.000đ/năm (giá tham khảo ngày 24/10/2026, chưa gồm VAT). Nếu đang chọn máy chủ, xem thêm 10 thông số cần đọc kỹ khi chọn VPS cho WordPress.