Datacachning handlar om att lagra nÄgon PHP-variabel i cacheminne och hÀmta tillbaka den senare frÄn cache. För detta ÀndamÄl tillhandahÄller cachekomponentens basklass CCache tvÄ metoder som anvÀnds för det mesta: set() och get().
För att lagra en variabel $value i cacheminnet vÀljer vi ett unikt ID och anropar set():
Yii::app()->cache->set($id, $value);Cachelagrade data förblir i cachen obegrÀnsat lÀnge om de inte tas bort pÄ grund av nÄgon cachningspolicy (t.ex. slut pÄ cacheutrymme medförande att det Àldsta datat tas bort). För Àndring av detta beteende, kan en förfallotidsparameter lÀmnas med i anropet till set() sÄ att data stÀdas bort frÄn cachen efter en viss tid:
// keep the value in cache for at most 30 seconds
Yii::app()->cache->set($id, $value, 30);Senare, nÀr variabeln behöver kommas Ät (antingen i samma eller nÄgon annan webbrequest), ÄterhÀmtas den frÄn cache genom anrop till get() med ID bifogat. Om vÀrdet som returneras Àr false, innebÀr detta att sökt vÀrde inte Àr tillgÀngligt i cachen utan mÄste genereras pÄ nytt.
$value=Yii::app()->cache->get($id);
if($value===false)
{
// regenerate $value because it is not found in cache
// and save it in cache for later use:
// Yii::app()->cache->set($id,$value);
}Vid val av ID för en variabel som skall cachas, tillse att ID:t Àr unikt bland alla andra variabler som kan komma att cachas i applikationen. Det Àr INTE ett krav att ID:t Àr unikt över fler applikationer dÄ cachekomponenten Àr intelligent nog att Ätskilja ID:n tillhörande skilda applikationer.
Vissa cachelagringar, sÄ som MemCache, APC, stöder ÄterhÀmtning av multipla cachelagrade vÀrden genom ett satsvis arbetssÀtt, vilket kan reducera onödig resursanvÀndning vid ÄterhÀmtning av cachelagrad data. Med start fr o m version 1.0.8, tillhandahÄlls en ny metod, mget(), för att dra nytta av finessen. I hÀndelse av att den underliggande cachelagringen inte stöder nÀmnda finess, simuleras den av mget().
För att ta bort ett cachat vÀrde, anropa delete(); för att ta bort allting frÄn cache, anropa flush(). Var mycket försiktig med att anropa flush() eftersom Àven cachelagrat data frÄn andra applikationer tas bort.
Tips: Eftersom CCache implementerar
ArrayAccess, kan en cachekomponent anvÀndas som en array. HÀr följer nÄgra exempel:$cache=Yii::app()->cache; $cache['var1']=$value1; // equivalent to: $cache->set('var1',$value1); $value2=$cache['var2']; // equivalent to: $value2=$cache->get('var2');
Förutom utgÄngen förfallotid, kan cachelagrat data ocksÄ ogiltiggöras som följd av nÄgon förÀndring i beroenden. Till exempel, om innehÄllet i nÄgon fil cachelagras och filen Àndras, sÄ skall kopian i cachen markeras som ogiltig och det senaste innehÄllet frÄn filen lÀsas i stÀllet.
Ett beroende representeras som en instans av CCacheDependency eller nedÀrvd klass. Dependency-instansen bifogas data som skall cachas i anropet till set().
// the value will expire in 30 seconds
// it may also be invalidated earlier if the dependent file is changed
Yii::app()->cache->set($id, $value, 30, new CFileCacheDependency('FileName'));Om vi nu ÄterhÀmtar $value frÄn cachen medelst anrop till get(),
kommer beroendet att utvÀrderas. Om en förÀndring skett erhÄlls returvÀrdet
false, vilket indikerar att data behöver genereras pÄ nytt.
Nedan följer en sammanstÀllning av tillgÀngliga cacheberoenden:
CFileCacheDependency: beroendet Àndras vid förÀndring av filens tidangivelse avseende senaste Àndring.
CDirectoryCacheDependency: beroendet Àndras vid förÀndring av nÄgon fil i katalogen eller dess underkataloger.
CDbCacheDependency: beroendet Àndras vid förÀndring i resultatet av databasfrÄgan given av specificerad SQL-sats.
CGlobalStateCacheDependency: beroendet Àndras vid förÀndring av vÀrdet för det specificerade globala tillstÄndet. Ett globalt tillstÄnd Àr en variabel som behÄller sitt vÀrde över multipla request och multipla sessioner i en applikation. Det definieras via CApplication::setGlobalState().
CChainedCacheDependency: beroendet Àndras om nÄgot av beroendena i kedjan förÀndras.
CExpressionDependency: beroendet Àndras om vÀrdet av det specificerade PHP-uttrycket Àndras. Denna klass har varit tillgÀnglig fr o m version 1.0.4.
Signup or Login in order to comment.