1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 21109 -->
<!-- Reviewed: no -->
<sect1 id="zend.cache.cache.manager">
<title>Der Cache Manager</title>
<para>
Es ist die Natur von Anwendungen eine Vielzahl an Caches jedes Types zu benötigen oft
abhängig vom Controller, der Bibliothek oder dem Domainmodell auf das zugegriffen wird.
Um die einfache Definition von <classname>Zend_Cache</classname> Optionen zu erlauben
(wie von der Bootstrap), damit auf ein Cacheobjekt zugegriffen werden kann und nur ein
minimales Setup im Sourcecode der Anwendung benötigt wird, wurde die Klasse
<classname>Zend_Cache_Manager</classname> geschrieben. Diese Klasse wird von
<classname>Zend_Application_Resource_Cachemanager</classname> verwendet um sicherzustellen
das die Konfiguration der Bootstrap vorhanden ist, und
<classname>Zend_Controller_Action_Helper_Cache</classname> um einen einfachen Zugriff und
eine einfache Instanzierung von Controllern und anderen Helfern zu erlauben.
</para>
<para>
Die grundsätzliche Operation dieser Komponente ist wie folgt. Der Cache Manager erlaubt es
Benutzern "Option Templates" zu konfigurieren, grundsätzlich Optionen für ein Set von
benannten Caches. Diese können gesetzt werden indem die Methode
<methodname>Zend_Cache_Manager::setCacheTemplate()</methodname> verwendet wird. Diese
Templates führen einen Cache nicht aus solange der Benutzer nicht versucht einen benannten
Cache zu empfangen (assoziiert mit einem existierenden Optionstemplate) indem die Methode
<methodname>Zend_Cache_Manager::getCache()</methodname> verwendet wird.
</para>
<programlisting language="php"><![CDATA[
$manager = new Zend_Cache_Manager;
$dbCache = array(
'frontend' => array(
'name' => 'Core',
'options' => array(
'lifetime' => 7200,
'automatic_serialization' => true
)
),
'backend' => array(
'name' => 'Core',
'options' => array(
'cache_dir' => '/path/to/cache'
)
)
);
$manager->setCacheTemplate('database', $dbCache);
/**
* Überall anders wo der Cache Manager vorhanden ist...
*/
$databaseCache = $manager->getCache('database');
]]></programlisting>
<para>
Der Cache Manager erlaubt das einfache Erstellen von vor-instanzierten Caches durch
Verwenden der Methode <methodname>Zend_Cache_Manager::setCache()</methodname>.
</para>
<programlisting language="php"><![CDATA[
$frontendOptions = array(
'lifetime' => 7200,
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => '/path/to/cache'
);
$dbCache = Zend_Cache::factory('Core',
'File',
$frontendOptions,
$backendOptions);
$manager = new Zend_Cache_Manager;
$manager->setCache('database', $dbCache);
/**
* Überall anders wo der Cache Manager vorhanden ist...
*/
$databaseCache = $manager->getCache('database');
]]></programlisting>
<para>
Wenn man aus irgendeinem Grund unsicher ist ob der Cache Manager einen vor-instanzierten
Cache enthält oder ein relevantes Option Cache Template um einen auf Anfrage zu erstellen,
kann die Existenz einer benannten Cachekonfiguration oder Instanz geprüft werden indem die
Methode <methodname>Zend_Cache_Manager::hasCache()</methodname> verwendet wird.
</para>
<programlisting language="php"><![CDATA[
$manager = new Zend_Cache_Manager;
$dbCache = array(
'frontend' => array(
'name' => 'Core',
'options' => array(
'lifetime' => 7200,
'automatic_serialization' => true
)
),
'backend' => array(
'name' => 'Core',
'options' => array(
'cache_dir' => '/path/to/cache'
)
)
);
$manager->setCacheTemplate('database', $dbCache);
/**
* Überall anders wo der Cache Manager vorhanden ist...
*/
if ($manager->hasCache('database')) {
$databaseCache = $manager->getCache('database');
} else {
// Erstelle einen Cache wenn keiner from Manager vorhanden ist
}
]]></programlisting>
<para>
In einigen Szenarios könnte man eine Anzahl von generell zu verwendenden Caches definiert
haben indem <classname>Zend_Cache_Manager</classname> verwendet wird, aber deren Optionen
feintunen bevor Sie anhängig von Ihren Notwendigkeiten verwendet werden. Man kann vorher
gesetzte Cache Templates on the fly bearbeiten bevor Sie instanziert werden indem die
Methode <methodname>Zend_Cache_Manager::setTemplateOptions()</methodname> verwendet wird.
</para>
<programlisting language="php"><![CDATA[
$manager = new Zend_Cache_Manager;
$dbCache = array(
'frontend' => array(
'name' => 'Core',
'options' => array(
'lifetime' => 7200,
'automatic_serialization' => true
)
),
'backend' => array(
'name' => 'Core',
'options' => array(
'cache_dir' => '/path/to/cache'
)
)
);
$manager->setCacheTemplate('database', $dbCache);
/**
* Überall anders wo der Cache Manager vorhanden ist...
* Hier haben wir entschieden einige kommende Datenbankabfragen zu Memcache zu
* Speichern statt dem vorkonfigurierten File Backend
*/
$fineTuning = array(
'backend' => array(
'name' => 'Memcached',
'options' => array(
'servers' => array(
array(
'host' => 'localhost',
'port' => 11211,
'persistent' => true,
'weight' => 1,
'timeout' => 5,
'retry_interval' => 15,
'status' => true,
'failure_callback' => ''
)
)
)
)
);
$manager->setTemplateOptions('database', $fineTuning);
$databaseCache = $manager->getCache('database');
]]></programlisting>
<para>
Um zu helfen den Cache Manager sinnvoller zu machen wird
<classname>Zend_Application_Resource_Cachemanager</classname> und auch der Action Helfer
<classname>Zend_Controller_Action_Helper_Cache</classname> angeboten. Beide sind in den
betreffenden Abschnitten des Referenz Handbuchs beschrieben.
</para>
<para>
<classname>Zend_Cache_Manager</classname> enthält bereits vier vordefinierte Cache Templates
welche "skeleton", "default", "page" und "tagcache" heißen. Der Standardcache ist ein
einfacher Dateibasierter Cache welcher das Core Frontend verwendet und annimmt das ein
cache_dir auf dem gleichen Level wie das konventionelle "public" Verzeichnis einer Zend
Framework Anwendung existiert und "cache" heißt. Der Skeleton Cache ist aktuell ein
<constant>NULL</constant> Cache, er enthält also keine Optionen. Die verbleibenden zwei
Caches werden verwendet um einen standardmäßigen statischen Seitencache zu implementieren
wobei statisches <acronym>HTML</acronym>, <acronym>XML</acronym> oder sogar
<acronym>JSON</acronym> in statische Dateien unter <filename>/public</filename> geschrieben
sein können. Die Kontrolle über einen statischen Seitencache wird über
<classname>Zend_Controller_Action_Helper_Cache</classname> angeboten, und man kann
die Einstellungen dieser "page" verändern und den "tagcache" den Sie verwendet um Tags
zu verfolgen indem <methodname>Zend_Cache_Manager::setTemplateOptions()</methodname>
verwendet wird, oder sogar <methodname>Zend_Cache_Manager::setCacheTemplate()</methodname>
wenn alle deren Optionen überladen werden.
</para>
</sect1>
|