wp_cache_set và wp_cache_get
wp_cache_set() và wp_cache_get() thuộc Object Cache API trong WordPress. Chúng lưu trữ dữ liệu tạm thời trong bộ nhớ RAM của PHP (qua object cache backend như Memcached, Redis hoặc cache nội bộ nếu không có backend). Dữ liệu được lưu trong suốt vòng đời request hoặc lâu hơn nếu có persistent object cache.
Ví dụ:
<?php
// Lưu dữ liệu vào object cache
wp_cache_set( 'popular_posts', $posts, 'custom', 60 );
// Lấy dữ liệu từ object cache
$cached = wp_cache_get( 'popular_posts', 'custom' );
if ( $cached ) {
return $cached;
}
?>
Đặc điểm:
- Nhanh: dữ liệu được giữ trong RAM (Redis/Memcached), không cần query database.
- Ngắn hạn: mặc định dữ liệu chỉ tồn tại trong vòng đời request, trừ khi có persistent object cache plugin.
- Thường dùng cho cache truy vấn DB hoặc tính toán phức tạp trong cùng request hoặc vài phút.
set_transient và get_transient
set_transient() và get_transient() thuộc Transients API. Điểm quan trọng: Transients luôn được lưu trong database (bảng wp_options), sau đó mới ghi thêm vào Object Cache nếu có Redis/Memcached. Điều này đảm bảo dữ liệu vẫn tồn tại ngay cả khi flush cache.
Ví dụ:
<?php
// Lưu dữ liệu trong 1 giờ
set_transient( 'homepage_banner', $banner_html, HOUR_IN_SECONDS );
// Lấy dữ liệu
$banner = get_transient( 'homepage_banner' );
if ( $banner ) {
echo $banner;
}
?>
Đặc điểm:
- Tồn tại lâu hơn: dữ liệu vẫn còn sau khi request kết thúc.
- Luôn có DB backup: ngay cả khi Object Cache bị flush, dữ liệu transient vẫn tồn tại trong
wp_options. - Nhanh hơn khi có Object Cache: nếu dùng Redis/Memcached thì truy xuất transients sẽ được tăng tốc.
- Thường dùng cho cache external API, dữ liệu ít thay đổi (ví dụ gọi API thời tiết mỗi 10 phút).
So sánh wp_cache và transients
| Tiêu chí | wp_cache_set / wp_cache_get | set_transient / get_transient |
|---|---|---|
| Vị trí lưu | RAM (Redis/Memcached hoặc cache nội bộ) | Database (wp_options) luôn luôn, + Object Cache nếu có |
| TTL (hết hạn) | Có nếu backend hỗ trợ TTL | Có TTL, quản lý bằng cặp _transient_timeout_… trong DB |
| Độ bền dữ liệu | Không có DB fallback, mất khi flush cache | Có DB fallback, tồn tại qua restart/flush cache |
| Tốc độ | Rất nhanh (RAM only) | Chậm hơn nếu chỉ có DB, nhanh nếu có Redis/Memcached |
| Use case điển hình | Cache query DB, template part, kết quả tính toán nặng | Cache external API, dữ liệu ít thay đổi, cần lưu vài phút/giờ |
Khi nào dùng wp_cache, khi nào dùng transient?
- Dùng wp_cache khi dữ liệu cần tốc độ truy xuất nhanh, không nhất thiết tồn tại lâu, và site có persistent object cache.
- Dùng transient khi dữ liệu cần TTL rõ ràng và cần tồn tại qua nhiều request, có DB backup đảm bảo.
- Lưu ý: nếu site không có Object Cache, transients sẽ đọc/ghi DB thường xuyên → có thể gây phình
wp_options. Cần dọn dẹp định kỳ.
Kết luận
wp_cache_set/wp_cache_get và set_transient/get_transient đều là công cụ hữu ích để cache dữ liệu trong WordPress. Khác biệt lớn nhất: wp_cache tập trung vào tốc độ trong RAM, không có DB fallback, trong khi transient luôn có DB lưu trữ để đảm bảo dữ liệu bền hơn. Cách chọn tùy vào nhu cầu: nếu cần cực nhanh → dùng wp_cache; nếu cần cache có TTL và tồn tại lâu dài → dùng transient.
Bình luận