mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-08 09:06:53 +01:00
118 lines
4.6 KiB
Plaintext
118 lines
4.6 KiB
Plaintext
Data Caching
|
|
============
|
|
|
|
Data caching sebenarnya tentang penyimpanan beberapa variabel PHP dalam cache dan mengambilnya
|
|
kemudian dari cache. Untuk keperluan ini, basis komponen cache [CCache]
|
|
menyediakan dua metode yang dipakai dari waktu ke waktu: [set()|CCache::set]
|
|
dan [get()|CCache::get].
|
|
|
|
Untuk menyimpan variabel `$value` dalam cache, kita memilih ID unik dan memanggil
|
|
[set()|CCache::set] untuk menyimpannya:
|
|
|
|
~~~
|
|
[php]
|
|
Yii::app()->cache->set($id, $value);
|
|
~~~
|
|
|
|
Data yang di-cache akan tetap berada dalam cache selamanya kecuali ia dihapus
|
|
karena beberapa kebijakan caching (contoh, ruang cache penuh dan data terlama
|
|
dihapus). Untuk mengubah perilaku ubum kita juga bisa menyediakan
|
|
parameter masa hidup saat memanggil [set()|CCache::set] dengan demikian data
|
|
akan dihapus dari cache setelah periode waktu tertentu:
|
|
|
|
~~~
|
|
[php]
|
|
// perlihara nilai dalam cache paling lama 30 detik.
|
|
Yii::app()->cache->set($id, $value, 30);
|
|
~~~
|
|
|
|
Selanjutnya, saat kita perlu mengakses variabel ini (baik dalam permintaan Web
|
|
yang sama atau berbeda), kita memanggil [get()|CCache::get] dengan ID untuk mengambilnya
|
|
dari cache. Jika nilai yang dikembalikan false, ini berarti nilai
|
|
tidak tersedia dalam cache dan kita harus membuatnya kembali.
|
|
|
|
~~~
|
|
[php]
|
|
$value=Yii::app()->cache->get($id);
|
|
if($value===false)
|
|
{
|
|
// buat ulang $value karena tidak ditemukan dalam cache
|
|
// dan simpan dalam cache untuk dipakai nanti:
|
|
// Yii::app()->cache->set($id,$value);
|
|
}
|
|
~~~
|
|
|
|
Ketika memilih ID untuk variabel yang di-cache, pastikan ID unik diantara
|
|
semua variabel lain yang mungkin di-cache dalam aplikasi. ID tidak perlu
|
|
unik diantara berbagai aplikasi karena komponen cache cukup pintar
|
|
untuk membedakan ID pada aplikasi yang
|
|
berbeda.
|
|
|
|
Beberapa penyimpanan cache, seperti MemCache, APC, mendukung pengambilan
|
|
multipel nilai yang di-cache dalam mode batch, ini dapat mengurangi beban terkait
|
|
pada pengambilan data cache. Mulai dari versi 1.0.8, metode baru bernama
|
|
[mget()|CCache::mget] disediakan guna mengeksploitasi fitur ini. Dalam hal penyimpanan
|
|
cache lapisan bawah tidak mendukung fitur ini, [mget()|CCache::mget] masih tetap akan
|
|
mensimulasikannya.
|
|
|
|
Untuk menghapus nilai yang di-cache dari cache, panggil [delete()|CCache::delete]; dan
|
|
untuk menghapus semuanya dari cache, panggil [flush()|CCache::flush]. Harap
|
|
berhati-hati saat memanggil [flush()|CCache::flush] karena ia juga menghapus data
|
|
yang di-cache yang berasal dari aplikasi lain.
|
|
|
|
> Tip: Karena [CCache] mengimplementasikan `ArrayAccess`, komponen cache bisa
|
|
> dipakai layaknya sebuah. Berikut adalah beberapa contoh:
|
|
> ~~~
|
|
> [php]
|
|
> $cache=Yii::app()->cache;
|
|
> $cache['var1']=$value1; // sama dengan: $cache->set('var1',$value1);
|
|
> $value2=$cache['var2']; // sama dengan: $value2=$cache->get('var2');
|
|
> ~~~
|
|
|
|
Ketergantungan Cache
|
|
--------------------
|
|
|
|
Selain setelan masa hidup, data yang di-cache juga bisa disegarkan berdasarkan
|
|
pada beberapa perubahan ketergantungan. Sebagai contoh, jika kita men-cache konten
|
|
beberapa file dan file berubah, kita harus menyegarkan duplikat yang di-cache
|
|
dan membaca konten terbaru dari file daripada cache.
|
|
|
|
Kami menyajikan ketergantungan sebagai turunan dari [CCacheDependency] atau anak
|
|
kelasnya. Kami mengoper turunan ketergantungan bersamaan dengan data yang di
|
|
-cache saat pemanggilan [set()|CCache::set].
|
|
|
|
~~~
|
|
[php]
|
|
// nilai akan berakhir dalam 30 detik
|
|
// ini juga akan disegarkan sebelumnya jika file dependen diubah
|
|
Yii::app()->cache->set($id, $value, 30, new CFileCacheDependency('FileName'));
|
|
~~~
|
|
|
|
Sekarang, jika kita mengambil `$value` dari cache dengan memanggil [get()|CCache::get],
|
|
ketergantungan akan dievaluasi dan jika ia berubah, kita akan mendapat nilai false
|
|
yang menunjukan data perlu dibuat ulang.
|
|
|
|
Di bawah ini adalah ringkasan ketergantungan cache yang tersedia:
|
|
|
|
- [CFileCacheDependency]: ketergantungan diubah jika waktu modifikasi
|
|
file terakhir diubah.
|
|
|
|
- [CDirectoryCacheDependency]: ketergantungan diubah jika file di
|
|
bawah direktori dan subdirektorinya berubah.
|
|
|
|
- [CDbCacheDependency]: ketergantungan diubah jika hasil queri
|
|
pernyataan SQL yang ditetapkan berubah.
|
|
|
|
- [CGlobalStateCacheDependency]: ketergantungan diubah jika nilai
|
|
kondisi global yang ditetapkan berubah. Kondisi global adalah variabel
|
|
yang persisten pada multipel permintaan dan multipel sesi dalam aplikasi.
|
|
Ini didefinisikan melalui [CApplication::setGlobalState()].
|
|
|
|
- [CChainedCacheDependency]: ketergantungan diubah jika salah satu
|
|
rantai berubah.
|
|
|
|
- [CExpressionDependency]: ketergantungan berubah jika hasil yang
|
|
ditetapkan ekspresi PHP
|
|
diubah. Kelas ini sudah tersedia sejak versi 1.0.4.
|
|
|
|
<div class="revision">$Id: caching.data.txt 1290 2009-08-06 16:13:11Z qiang.xue $</div> |