File: Zend_Cache-Theory.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (181 lines) | stat: -rw-r--r-- 7,257 bytes parent folder | download | duplicates (2)
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
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.cache.theory">
    <title>Die Theorie des Cachens</title>

    <para>
        Es gibt 3 Schlüsselkonzepte in <classname>Zend_Cache</classname>. Eines ist die eindeutige
        Identifizierung (ein String), die benutzt wird, um Cache Datensätze zu identifizieren. Das
        zweite ist die <emphasis>'lifetime'</emphasis> Direktive, wie im Beispiel gezeigt; sie
        definiert, wie lange eine gecachte Ressource als 'frisch' betrachtet wird. Das dritte
        Konzept ist die bedingte Ausführung, so das Teile des Codes komplett übersprungen werden
        können, was die Leistung steigert. Die Haupt-Frontend Funktion (eg.
        <methodname>Zend_Cache_Core::get()</methodname>) ist immer so gestaltet, das
        <constant>FALSE</constant> zurückgegeben wird, wenn ein Cache fehlt. Aber nur, wenn das für
        die Natur des Frontends Sinn macht. Das erlaubt es Endbenutzern, die Teile des Codes, die
        gecached (oder übersprungen) werden sollen, in
        <emphasis><methodname>if()</methodname>{ ... }</emphasis> Anweisungen zu umhüllen, wobei
        die Bedingung die <classname>Zend_Cache</classname> Methode selbst ist. Am Ende der Blöcke
        muss das erstellte auf alle Fälle gespeichert werden (z.B.
        <methodname>Zend_Cache_Core::save()</methodname>).
    </para>

    <note>
        <para>
            Das Design der bedingten Ausführung des erzeugten Codes ist in einigen Frontends nicht
            notwendig (<emphasis>Function</emphasis>, zum Beispiel) wenn die komplette Logik im
            verwendeten Frontend integriert ist.
        </para>
    </note>

    <note>
        <para>
            'Cache hit' ist ein Ausdruck für eine Bedingung, wenn ein Cache Datensatz gefunden
            wurde, er gültig und 'frisch' ist (in anderen Worten, er ist noch nicht abgelaufen).
            'Cache miss' ist alles andere. Wenn ein 'Cache miss' passiert, müssen die Daten erzeugt
            werden (wie man es normalerweise tun würde) und anschließend cachen. Wenn ein
            'Cache hit' geschieht muß, auf der anderen Seite, das Backend automatisch den Datensatz
            vom Cache transparent holen.
        </para>
    </note>

    <sect2 id="zend.cache.factory">
        <title>Die Zend_Cache Factory Methode</title>

        <para>
            Ein guter Weg, um eine verwendbare Instanz eines <classname>Zend_Cache</classname>
            Frontends zu erstellen, wird im folgenden Beispiel gegeben:
        </para>

        <programlisting language="php"><![CDATA[
// Wir wählen ein Backend (zum Beispiel 'File' oder 'Sqlite'...)
$backendName = '[...]';

// Wir wählen ein Frontend (zum Beispiel 'Core', 'Output', 'Page'...)
$frontendName = '[...]';

// Wir definieren ein Array von Optionen für das gewählte Frontend
$frontendOptions = array([...]);

// Wir definieren ein Array von Optionen für das gewählte Backend
$backendOptions = array([...]);

// Wir erstellen eine gute Instanz
// (natürlich sind die letzten 2 Argumente optional)
$cache = Zend_Cache::factory($frontendName,
                             $backendName,
                             $frontendOptions,
                             $backendOptions);
]]></programlisting>

        <para>
            In den folgenden Beispielen wird angenommen, dass die <varname>$cache</varname> Variable
            ein gültiges, initiiertes Frontend wie gezeigt enthält und dass verstanden wird, wie
            Parameter an das ausgewählte Backend übergeben werden.
        </para>

        <note>
            <para>
                Immer <methodname>Zend_Cache::factory()</methodname> benutzen, um eine Frontend
                Instanz zu bekommen. Das selbstständige Instantiieren von Frontends und Backends
                funktioniert nicht so wie erwartet.
            </para>
        </note>
    </sect2>

    <sect2 id="zend.cache.tags">
        <title>Markierte Datensätze</title>

        <para>
            Markierungen sind ein Weg um Cache Datensätze zu kategorisieren. Wenn der Cache mit der
            <methodname>save()</methodname> Methode abgespeichert werden soll, kann ein Array mit
            Markierungen für diesen Datensatz angelegt werden. Dann besteht die Möglichkeit, alle
            markierten Cache Datensätze mit einer bestimmten Markierung (oder Markierungen), zu
            löschen:
        </para>

        <programlisting language="php"><![CDATA[
$cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
]]></programlisting>

        <note>
            <para>
                Man beachte, dass die <methodname>save()</methodname> Method einen optionales,
                viertes Argument akzeptiert: <varname>$specificLifetime</varname> (wenn !=
                <constant>FALSE</constant>, setzt es eine spezifische Laufzeit für diesen speziellen
                Cache Eintrag)
            </para>
        </note>
    </sect2>

    <sect2 id="zend.cache.clean">
        <title>Löschen des Caches</title>

        <para>
            Um eine bestimmte Cache ID zu entfernen oder annullieren, kann die
            <methodname>remove()</methodname> Methode benutzt werden:
        </para>

        <programlisting language="php"><![CDATA[
$cache->remove('idToRemove');
]]></programlisting>

        <para>
            Um mehrere Cache IDs mit einer Operation zu entfernen oder annulieren, kann die
            <methodname>clean()</methodname> Methode benutzt werden. Zum Beispiel um alle Cache
            Datensätze zu entfernen :
        </para>

        <programlisting language="php"><![CDATA[
// Löschen aller Datensätze
$cache->clean(Zend_Cache::CLEANING_MODE_ALL);

// Nur abgelaufene löschen
$cache->clean(Zend_Cache::CLEANING_MODE_OLD);
]]></programlisting>

        <para>
            Um Cache Einträge zu löschen, die zu den Tags 'tagA' und 'tagC' entsprechen :
        </para>

        <programlisting language="php"><![CDATA[
$cache->clean(
    Zend_Cache::CLEANING_MODE_MATCHING_TAG,
    array('tagA', 'tagC')
);
]]></programlisting>

        <para>
            Um Cache Einträge zu löschen die den Tags 'tagA' oder 'tagC' nicht entsprechen:
        </para>

        <programlisting language="php"><![CDATA[
$cache->clean(
    Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
    array('tagA', 'tagC')
);
]]></programlisting>

        <para>
            Um Cache Einträge zu löschen, die zu den Tags 'tagA' oder 'tagC' entsprechen :
        </para>

        <programlisting language="php"><![CDATA[
$cache->clean(
    Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
    array('tagA', 'tagC')
);
]]></programlisting>

        <para>
            Mögliche Löschmodi sind: <constant>CLEANING_MODE_ALL</constant>,
            <constant>CLEANING_MODE_OLD</constant>,
            <constant>CLEANING_MODE_MATCHING_TAG</constant>,
            <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> und
            <constant>CLEANING_MODE_MATCHING_ANY_TAG</constant>. Die letzteren sind, wie deren
            Namen vermuten lassen, kombiniert mit einem Array von Markierungen für die
            Löschoperation.
        </para>
    </sect2>
</sect1>