1. Cache Expiry và vấn đề “cache lạnh”
Khi bạn dùng plugin cache như LiteSpeed Cache, WP Super Cache, hoặc Redis Object Cache, mỗi trang được lưu tạm trong cache (RAM hoặc file). Tuy nhiên, sau một khoảng thời gian – gọi là TTL (Time To Live) – cache sẽ bị xóa.
Khi người dùng đầu tiên truy cập sau khi TTL kết thúc:
- Cache không còn tồn tại → request “cache miss”.
- WordPress phải xử lý toàn bộ quy trình: PHP, database, query, render HTML.
- Sau đó kết quả mới được lưu lại vào cache cho các request tiếp theo.
Kết quả là tốc độ của request đầu tiên sau mỗi lần cache hết hạn luôn chậm hơn bình thường. Đối với site có nhiều bài viết hoặc traffic đều đặn, việc này có thể xảy ra liên tục.
2. Kỹ thuật Warm Cache là gì?
Warm Cache (còn gọi là pre-warming cache) là kỹ thuật chủ động làm nóng cache trước khi người dùng thật truy cập. Thay vì chờ cache hết hạn rồi mới sinh lại, hệ thống sẽ tự động tái tạo cache định kỳ để đảm bảo mọi trang luôn có sẵn trong bộ nhớ.
Mục tiêu chính của Warm Cache:
- Giữ cho cache luôn “ấm” – không bao giờ trống hoàn toàn.
- Giảm cache miss → giảm tải CPU và truy vấn database.
- Duy trì tốc độ ổn định cho người dùng, đặc biệt với site có traffic liên tục.
3. Cách hoạt động của Warm Cache
Có nhiều cách để triển khai cơ chế Warm Cache, nhưng về bản chất, quy trình luôn gồm 3 bước:
- Thu thập danh sách các URL cần làm nóng (trang chủ, bài viết, chuyên mục, trang sản phẩm…).
- Gửi request giả lập (HTTP GET) tới các URL đó theo chu kỳ – trước khi cache hết hạn.
- Cache plugin hoặc server cache sẽ lưu lại kết quả như thể người dùng thật đã truy cập.
Với site WordPress, bạn có thể triển khai kỹ thuật này theo 3 cấp độ:
- Level 1: Dùng plugin hỗ trợ Warm Cache (ví dụ LiteSpeed Cache có sẵn chức năng này).
- Level 2: Dùng WP-CLI hoặc cronjob tự gọi các URL định kỳ.
- Level 3: Tự code script PHP prefetch thông minh dựa trên dữ liệu view hoặc sitemap.
4. Ví dụ Warm Cache đơn giản bằng WP-CLI
Dưới đây là ví dụ tạo cronjob Warm Cache cho toàn bộ bài viết đã publish:
# Lấy danh sách URL bài viết và warm cache bằng curl
wp post list --post_status=publish --field=url | xargs -n 1 -P 5 curl -s -o /dev/null
Lệnh trên sẽ:
- Duyệt toàn bộ bài viết đã publish.
- Dùng
curlđể gửi request song song (5 luồng cùng lúc). - Làm nóng cache mà không hiển thị kết quả ra terminal.
Bạn có thể đưa lệnh này vào cronjob thực thi mỗi 6 giờ:
0 */6 * * * /usr/bin/wp post list --post_status=publish --field=url | xargs -n 1 -P 5 curl -s -o /dev/null
5. Triển khai Warm Cache bằng PHP (tự động trong WordPress)
Nếu bạn muốn hệ thống tự warm cache ngay trong WordPress, có thể dùng hook wp_schedule_event để gọi lại định kỳ:
<?php
/**
* Plugin Name: Warm Cache Automation
* Description: Giữ cache luôn ấm bằng cách tự động preload các trang quan trọng.
*/
add_action('init', function () {
if (!wp_next_scheduled('warm_cache_cron')) {
wp_schedule_event(time(), 'hourly', 'warm_cache_cron');
}
});
add_action('warm_cache_cron', function () {
$urls = [
home_url('/'),
home_url('/blog/'),
home_url('/category/news/'),
];
$recent_posts = get_posts([
'post_type' => 'post',
'numberposts' => 10,
'post_status' => 'publish',
]);
foreach ($recent_posts as $post) {
$urls[] = get_permalink($post->ID);
}
foreach ($urls as $url) {
wp_remote_get($url, ['timeout' => 10]);
}
});
Đoạn mã trên:
- Tạo cron job chạy mỗi giờ một lần.
- Tự động truy cập trang chủ, trang chuyên mục và 10 bài viết mới nhất.
- Khi request được gửi, plugin cache (hoặc CDN) sẽ tự làm nóng cache tương ứng.
6. Kết hợp Warm Cache với CDN và Object Cache
Warm Cache không chỉ áp dụng cho cache HTML, mà còn hữu ích cho các lớp cache khác:
- Object Cache: Duy trì các truy vấn nặng (như menu, option, user data) trong Redis hoặc Memcached để tránh tái tạo.
- CDN Cache: Nhiều CDN như Cloudflare, BunnyCDN, hoặc Fastly cho phép bạn gửi request “prefetch” để warm cache ở edge server.
- REST API Cache: Các endpoint API có thể được prefetch định kỳ để đảm bảo phản hồi nhanh cho front-end.
7. Lưu ý khi triển khai Warm Cache
- Không nên warm toàn bộ site nếu có hàng chục nghìn URL — hãy ưu tiên trang có traffic cao.
- Luôn chạy warm cache trong thời gian thấp tải (ban đêm hoặc ngoài giờ cao điểm).
- Theo dõi CPU, RAM và log để tránh tạo áp lực lên server.
- Sử dụng queue hoặc batching nếu site lớn (ví dụ: warm 100 URL mỗi phút).
8. Kết luận
Kỹ thuật Warm Cache là bước nâng cao trong tối ưu hiệu năng WordPress. Nó không chỉ giúp loại bỏ độ trễ sau khi cache hết hạn, mà còn đảm bảo trải nghiệm người dùng luôn ổn định, kể cả trong môi trường traffic cao. Bằng cách kết hợp cronjob, WP-CLI, và object cache hợp lý, bạn có thể giữ website WordPress luôn “ấm”, luôn nhanh và sẵn sàng cho mọi request.
Bình luận