Wordpress Transients API Object Cache Caching Strategies
Definisi
Transients API menyimpan nilai berbasis key dengan waktu kedaluwarsa (expiration), cocok untuk cache hasil yang mahal dihitung ulang. Object Cache adalah lapisan cache runtime (default in-memory per request, atau external seperti Redis/Memcached via drop-in) untuk wp_cache_* dan banyak query internal.
Kapan dipakai
- Transients: data mahal yang boleh tidak uptodate sesaat (feed eksternal, agregasi query, hasil API pihak ketiga). Transients otomatis dibuang saat expire.
- Options: data yang harus persisten dan tidak kedaluwarsa (pengaturan, flag).
- Object Cache: cache query/post/term otomatis yang sudah disediakan WordPress; pakai external cache kalau traffic tinggi dan ingin cache lintas request.
Cara kerja
Transients
$value = get_transient('harga_cache');
if (false === $value) {
$value = hitungHargaMahal();
set_transient('harga_cache', $value, HOUR_IN_SECONDS);
}false adalah sentinel: kalau nilai aslinya memang false, tetap dianggap miss. Untuk nilai boolean asli, bungkus ke array/object.
Object cache (external)
wp_cache_add_global_groups(['my_group']); // tidak dibersihkan tiap blog di multisite
$post = wp_cache_get('my_key', 'my_group');
if (!$post) {
$post = expensive_query();
wp_cache_set('my_key', $post, 'my_group', 300);
}Dengan drop-in Redis/Memcached, cache bertahan lintas request.
Struktur alur
Contoh invalidasi manual
delete_transient('harga_cache');
wp_cache_delete('my_key', 'my_group');Saat post diupdate, WordPress otomatis menghapus cache object terkait; transients butuh dihapus manual lewat hook save_post.
Catatan implementasi
- Jangan simpan data sensitif di transients yang bisa dibaca公开 (transients disimpan di options table secara default).
- Gunakan grup global untuk data yang sama di seluruh network multisite.
- Untuk cache yang harus selalu segar saat data berubah, pasang invalidation di hook terkait, jangan andalkan expiry saja.
Kesalahan umum
- Cache invalidation terlewat: data berubah tapi transients tidak dihapus, user lihat data lama.
- Menyimpan
falsesebagai nilai asli:get_transientmengembalikanfalseuntuk miss, jadi sulit dibedakan. - Terlalu pendek / terlalu panjang expiry: terlalu pendek membuat cache percuma, terlalu panjang membuat data usang.
- Object cache tanpa drop-in: mengira cache persisten lintas request, padahal default hanya per-request.