Saya mencari jawaban yang pasti di sini. Ketika cache objek diaktifkan, di mana opsi dan transien berakhir hidup?
Secara default, keduanya disimpan dalam database. Tetapi saya telah mendengar beberapa referensi bahwa memcache akan menyimpannya di tempat lain dan APC akan melakukan sesuatu yang lain sama sekali. Dimana, tepatnya , apakah data ini akan bertahan dalam kedua kasus?
Jawaban:
WordPress, secara default, melakukan bentuk "Object Caching" tetapi masa pakainya hanya satu halaman.
Opsi sebenarnya adalah contoh yang sangat bagus untuk ini. Lihatlah jawaban ini untuk info lebih lanjut. Ringkasan:
SELECT option_name, option_value from $wpdb->options
pernyataan sederhanaget_option
tidak pernah menekan database karena disimpan dengan API cache WP.Opsi selalu "hidup" dalam database dan selalu bertahan di sana - itulah sumber "kanonik" mereka. Yang mengatakan, opsi dimuat ke dalam objek cache sehingga ketika Anda meminta opsi ada kemungkinan 99% bahwa permintaan tidak akan pernah mencapai database.
Transien sedikit berbeda.
WordPress memungkinkan Anda untuk mengganti api cache dengan drop-in - file yang ditempatkan langsung di
wp-content
folder Anda . Jika Anda membuat cache sendiri, drop in atau gunakan plugin yang ada , Anda dapat membuat cache objek bertahan lebih lama dari satu pemuatan halaman. Ketika Anda melakukan itu, transien, ubah sedikit.Mari kita lihat
set_transient
fungsi diwp-includes/option.php
.Hmmm
$_wp_using_ext_object_cache
? Jika itu benar, WordPress menggunakan objek cache bukan database untuk menyimpan transien. Jadi bagaimana itu bisa menjadi kenyataan? Saatnya mengeksplorasi bagaimana WP mengatur API cache-nya sendiri.Anda dapat melacak hampir semua hal untuk
wp-load.php
atauwp-settings.php
- keduanya penting untuk proses bootstrap WordPress. Di cache kami, ada beberapa baris yang relevan diwp-settings.php
.Ingat barang drop-in dari atas? Mari kita lihat
wp_start_object_cache
diwp-includes/load.php
.Baris fungsi yang relevan (yang berkaitan dengan
$_wp_using_ext_object_cache
itu mengubah cara transien disimpan).jika
object-cache.php
ada di direktori konten Anda akan disertakan dan WP menganggap Anda menggunakan cache eksternal yang persisten - disetel$_wp_using_ext_object_cache
ke true.Jika Anda menggunakan transien objek cache eksternal akan menggunakannya. Yang memunculkan pertanyaan kapan harus menggunakan opsi vs transien.
Sederhana. Jika Anda membutuhkan data untuk bertahan tanpa batas waktu, gunakan opsi. Mereka mendapatkan "cache", tetapi sumber kanonik mereka adalah database dan mereka tidak akan pernah pergi kecuali jika pengguna secara eksplisit memintanya.
Untuk data yang harus disimpan untuk jangka waktu tertentu, tetapi tidak perlu bertahan selama transien penggunaan seumur hidup yang ditentukan. Secara internal, WP akan mencoba menggunakan cache objek eksternal yang persisten, jika tidak, maka data akan masuk ke tabel opsi dan mengumpulkan sampah melalui psuedo-cron WordPress. ketika mereka kedaluwarsa.
Beberapa masalah / pertanyaan lain:
get_option
?Mungkin. Mereka membuat panggilan ke fungsi overhead, tetapi kemungkinan tidak akan mencapai basis data. Pemuatan basis data sering kali merupakan masalah yang lebih besar dalam skalabilitas aplikasi web daripada pekerjaan yang dipilih oleh bahasa pilihan Anda.add_option
dengan argumen terakhir, opsional karenano
tidak diisi secara otomatis. Yang mengatakan, sekali Anda mengambilnya sekali, mereka masuk ke cache dan panggilan berikutnya tidak akan mencapai database.sumber
Ada 4 jenis cache yang saya ketahui
Trivial - Selalu aktif dan berpengaruh sebelum caching lainnya ikut bermain. Ia menyimpan item yang di-cache dalam array php yang berarti bahwa ia menghabiskan memori dari sesi eksekusi php Anda, dan bahwa cache dikosongkan setelah eksekusi php selesai. yaitu bahkan tanpa menggunakan cache lain jika Anda memanggil get_option ('opt') dua kali berturut-turut, Anda akan membuat permintaan DB hanya pertama kali dan kedua kalinya nilainya akan dikembalikan dari memori.
File - Nilai cache disimpan dalam file di suatu tempat di bawah direktori root Anda. Saya percaya ini terbukti tidak efektif dalam hal kinerja kecuali Anda memiliki disk yang sangat cepat atau penyimpanan file yang dipetakan.
APC (atau cache berbasis akselerator php lainnya) - Nilai cache disimpan dalam memori mesin host Anda dan di luar alokasi memori php Anda. Jebakan potensial terbesar adalah tidak ada ruang lingkup data dan jika Anda menjalankan dua situs yang berpotensi masing-masing dapat mengakses data yang di-cache dari yang lain, atau menimpanya.
Memcache - ini adalah cache berbasis jaringan. Anda dapat menjalankan layanan caching di mana saja di jaringan dan Ini mungkin menyimpan nilai dalam memori hostnya. Anda mungkin tidak perlu memcache kecuali Anda sedang melakukan load balancing.
BTW, objek caching adalah caching lebih dari pilihan, ia akan menyimpan hampir semua yang diambil dari DB menggunakan WP API tingkat tinggi.
sumber
Opsi selalu disimpan dalam database, sementara transien dapat disimpan hanya dalam memori bersama jika APC dan plugin yang mengimplementasikan caching APC di WP diinstal. Memcache juga menggunakan memori.
Opsi juga disimpan dalam memori, dan dimuat dari sana jika memungkinkan (jika tidak, permintaan db dilakukan).
sumber
Pertanyaan bagus
Saya pikir bagian dengan bagaimana WordPress menggunakan
WP_Object_Cache
kelas masih hilang, jadi saya akan menambahkannya.Dari dokumen:
Ini
WP_Object_Cache
strukturnya.Anda menggunakan
stats()
metode ini untuk menampilkan statistik umum tentang objek cache global dan apa yang ada di sana. Berikut ini hasilnya:Inilah yang saya dapatkan sebelumnya di awal template seperti
single.php
.Perhatikan variabel yang kami minati adalah:
global $wp_object_cache
.Pribadi anggota
$cache
memegang data caching yang sebenarnya.Sejak saya masuk
single.php
ketika saya mencetak cache:Saya mendapatkan satu posting di-cache.
Objek akan menjadi nilainya, dan kunci caching akan menjadi
Di sini Anda dapat memeriksa
$cache_key
struktur:sumber