Data Caching speichert einige PHP-Variablen im Cache und ruft sie später aus dem Cache ab. Zu diesem Zweck stellt die Basisklasse CCache der Caching-Komponenten die beiden am häufigsten verwendeten Methoden zur Verfügung: set() und get().
Um eine Variable $value
im Cache zu speichern, wählen wir eine eindeutige ID und rufen set() auf, um sie zu speichern:
Yii::app()->cache->set($id, $value);
Zwischengespeicherte Daten bleiben im Cache, es sei denn, sie werden aufgrund einer Caching-Richtlinie gelöscht (z. B. Cache-Speicherplatz ist voll, alte Daten werden gelöscht). Um dieses Verhalten zu ändern, können wir beim Aufruf von set() einen Ablaufparameter angeben, sodass die zwischengespeicherten Daten nach einem festgelegten Zeitraum gelöscht werden:
// 值$value 在缓存中最多保留30秒 Yii::app()->cache->set($id, $value, 30);
Wenn wir später auf diese Variable zugreifen müssen (in derselben oder einer anderen Webanforderung), können wir get() nach ID aufrufen, um sie aus dem Cache abzurufen. Wenn false zurückgegeben wird, bedeutet dies, dass dieser Wert nicht im Cache verfügbar ist und wir ihn neu generieren sollten.
$value=Yii::app()->cache->get($id); if($value===false) { // 因为在缓存中没找到 $value ,重新生成它 , // 并将它存入缓存以备以后使用: // Yii::app()->cache->set($id,$value); }
Stellen Sie bei der Auswahl einer ID für die zwischenzuspeichernde Variable sicher, dass diese ID mit allen konsistent ist Andere Variablen in der Anwendung sind eindeutig. Diese ID muss zwischen verschiedenen Anwendungen nicht eindeutig sein. Die Caching-Komponente ist intelligent genug, um zwischen IDs in verschiedenen Anwendungen zu unterscheiden.
Einige Cache-Speicher wie MemCache und APC unterstützen das Abrufen mehrerer Cache-Werte im Batch-Modus. Dies reduziert den Aufwand beim Abrufen zwischengespeicherter Daten. Ab Version 1.0.8 bietet Yii eine neue Methode namens mget(). Es kann diese Funktion nutzen. Wenn der zugrunde liegende Cache-Speicher diese Funktionalität nicht unterstützt, kann mget() sie trotzdem simulieren.
Um einen zwischengespeicherten Wert aus dem Cache zu löschen, rufen Sie delete() auf; um alle Daten im Cache zu löschen, rufen Sie Flush() auf. Seien Sie vorsichtig, wenn Sie „flush()“ aufrufen, da dadurch auch Caches in anderen Anwendungen gelöscht werden.
Tipp: Da CCache
ArrayAccess
implementiert, kann die Cache-Komponente auch wie ein Array verwendet werden. Hier ein paar Beispiele:
$cache=Yii::app()->cache; $cache['var1']=$value1; // 相当于: $cache->set('var1',$value1); $value2=$cache['var2']; // 相当于: $value2=$cache->get('var2');Nach dem Login kopieren
Zusätzlich zu Ablaufeinstellungen können zwischengespeicherte Daten aufgrund von Änderungen in den Abhängigkeitsbedingungen auch ungültig werden. Wenn wir beispielsweise den Inhalt bestimmter Dateien zwischenspeichern und diese Dateien sich ändern, sollten wir die zwischengespeicherten Daten ungültig machen und die neuesten Inhalte aus der Datei statt aus dem Cache lesen.
Wir stellen eine Abhängigkeit als Instanz von CCacheDependency oder einer seiner Unterklassen dar. Beim Aufruf von set() übergeben wir es zusammen mit den zwischenzuspeichernden Daten.
// 此值将在30秒后失效 // 也可能因依赖的文件发生了变化而更快失效 Yii::app()->cache->set($id, $value, 30, new CFileCacheDependency('FileName'));
Wenn wir nun $value
aus dem Cache erhalten, indem wir get() aufrufen, wird die Abhängigkeit überprüft dass wir bei Änderungen einen falschen Wert erhalten, der angibt, dass die Daten neu generiert werden müssen.
Im Folgenden finden Sie eine kurze Beschreibung der verfügbaren Cache-Abhängigkeiten:
CFileCacheDependency: Wenn sich die letzte Änderungszeit der Datei ändert, ändert sich auch die Abhängigkeit.
CDirectoryCacheDependency: Wenn sich die Dateien im Verzeichnis und seinen Unterverzeichnissen ändern, ändert sich die Abhängigkeit.
CDbCacheDependency: Wenn sich das Abfrageergebnis der angegebenen SQL-Anweisung ändert, ändert sich auch die Abhängigkeit.
CGlobalStateCacheDependency: Wenn sich der angegebene globale Status ändert, ändert sich auch die Abhängigkeit. Der globale Status ist eine anforderungs- und sitzungsübergreifende Variable in der Anwendung. Es wird durch CApplication::setGlobalState() definiert.
CChainedCacheDependency: Diese Abhängigkeit ändert sich, wenn sich eine Abhängigkeit in der Kette ändert.
CExpressionDependency: Wenn sich das Ergebnis des angegebenen PHP-Ausdrucks ändert, ändert sich auch die Abhängigkeit. Diese Klasse ist seit Version 1.0.4 verfügbar.
Das Obige ist das Yii Framework Official Guide Supplement Series 29 – Cache: Data Cache. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!