1. Transient là gì?
Transient đơn giản là “một biến tạm”, được lưu lại trong cache (hoặc database nếu không có cache engine) để tiết kiệm chi phí xử lý hoặc truy vấn.
Cấu trúc cơ bản:
set_transient($key, $value, $expiration_in_seconds);
get_transient($key);
delete_transient($key);
Ví dụ: lưu lại danh sách bài viết được xem nhiều nhất trong 1 tiếng:
$posts = get_transient('popular_posts');
if (!$posts) {
$posts = get_posts([
'meta_key' => '_view_count',
'orderby' => 'meta_value_num',
'posts_per_page' => 5,
]);
set_transient('popular_posts', $posts, HOUR_IN_SECONDS);
}
2. Transient hoạt động thế nào?
- Nếu có object cache (Redis/Memcached): lưu vào RAM → cực nhanh
- Nếu không: lưu vào bảng
wp_options, với tên dạng_transient_* - Khi hết hạn, WordPress chỉ đánh dấu là đã hết hạn, và bỏ qua nếu gọi lại. Nhưng bản ghi vẫn tồn tại trong database cho đến khi bị ghi đè hoặc dọn bằng tool, WP-CLI hoặc plugin khác như Advanced Database Cleaner
3. Khi nào nên dùng Transient?
Dùng Transient khi bạn muốn:
- Cache kết quả truy vấn nặng (WP_Query, API ngoài…)
- Lưu dữ liệu tạm trong plugin (ví dụ: shortcode gọi API)
- Cache từng phần giao diện (ví dụ: box “bài viết nổi bật”)
Không nên dùng nếu:
- Dữ liệu thay đổi liên tục (VD: view count từng giây)
- Cần lưu lâu dài hoặc không kiểm soát được key
4. Gợi ý cách đặt key transient
Hãy luôn đặt key có prefix để tránh đụng nhau giữa plugin/theme:
$key = 'initvc_popular_' . get_locale();
Nếu cache liên quan đến người dùng:
$key = 'user_menu_' . get_current_user_id();
5. Xóa cache đúng cách
Nếu bạn thay đổi nội dung và cần xóa cache:
delete_transient('popular_posts');
Có thể đặt auto-clear khi nội dung được cập nhật:
add_action('save_post', function () {
delete_transient('popular_posts');
});
6. Không chỉ là get/set – bạn có thể build hệ thống cache riêng
Ví dụ nâng cao: cache REST API response trong plugin của bạn:
add_action('rest_api_init', function () {
register_rest_route('demo/v1', '/cached', [
'methods' => 'GET',
'callback' => function () {
$cached = get_transient('demo_cached_response');
if ($cached) return $cached;
$data = ['time' => current_time('mysql'), 'data' => get_posts(['numberposts' => 3])];
set_transient('demo_cached_response', $data, 300);
return $data;
},
]);
});
7. Ưu và nhược điểm của Transient API
Ưu điểm:
- Gọn, có sẵn trong WordPress
- Không cần cài plugin ngoài
- Làm việc tốt với hoặc không có object cache
Nhược điểm:
- Không nên dùng để lưu dữ liệu lớn hoặc lâu dài
- Nếu không có Redis/Memcached, sẽ ghi vào database → cần kiểm soát số lượng
- Nếu dùng key ngẫu nhiên liên tục (ví dụ thêm ID, timestamp…), sẽ tạo hàng nghìn bản ghi
_transient_*mà WordPress không bao giờ dọn. Điều này có thể khiến bảngwp_optionsnổ tung nếu bạn không dùng công cụ như Advanced Database Cleaner để xóa định kỳ.
Kết luận
Transient API là vũ khí cực mạnh nếu bạn muốn plugin hoặc website chạy nhanh hơn mà không cần phụ thuộc plugin cache phức tạp. Hãy dùng đúng – cache phần nặng, xóa đúng lúc – bạn sẽ thấy site nhẹ đi đáng kể.
Nếu bạn từng tự hỏi: “Làm sao cache đoạn này?”, thì Transient chính là câu trả lời đầu tiên nên nghĩ tới. Và nếu bạn chưa từng sử dụng hoặc chưa quen cách áp dụng, hãy bắt đầu từ phiên bản cơ bản hơn tại đây:
Bình luận