Zend_Cache-Theory.xml 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <sect1 id="zend.cache.theory">
  4. <title>Теория кэширования</title>
  5. <para>
  6. Есть три ключевых понятия в <classname>Zend_Cache</classname>. Первое — уникальный
  7. идентификатор (строка), который служит для идентификации записей кэша.
  8. Второе — это директива <emphasis>'lifetime'</emphasis>, которую вы могли видеть
  9. в предыдущих примерах; она определяет, в течение какого времени
  10. кэшируемый ресурс считается "свежим". Третье понятие — условное
  11. исполнение, используемое для того, чтобы части вашего кода могли быть
  12. пропущены целиком, этим повышается производительность. Основной метод
  13. фронтэнда (например, <methodname>Zend_Cache_Core::get()</methodname>) всегда
  14. спроектирован так, чтобы возвращать <constant>FALSE</constant> при промахе кэша,
  15. если это имеет смысл для данного фронэнда. Это дает конечным
  16. пользователям возможность включать части кода, которые нужно
  17. кэшировать (и затем пропускать) в операторы <emphasis>if(){ ... }</emphasis>,
  18. где условием является сам метод <classname>Zend_Cache</classname>. Но в конце
  19. этих блоков вы должны сохранять то, что было сгенерировано (например,
  20. методом <methodname>Zend_Cache_Core::save()</methodname>).
  21. </para>
  22. <note><para>
  23. Для некоторых фронтэндов включение условного исполнения в
  24. код не нужно, так как вся логика уже реализована в них
  25. (например, <emphasis>Function</emphasis>).
  26. </para></note>
  27. <note><para>
  28. "Попадание в кэш" — термин для определения того состояния, когда запись
  29. кэша найдена, является корректной и "свежей" (другими словами, для
  30. которой не закончился срок действия). Иначе имеет место "промах кэша".
  31. Когда происходит "промах кэша", вы должны сгенерировать свои данные,
  32. которые помещаются в кэш. С другой стороны, если есть "попадание",
  33. то бэкэнд автоматически извлечет запись из кэша.
  34. </para></note>
  35. <sect2 id="zend.cache.factory">
  36. <title>Фабричный метод Zend_Cache</title>
  37. <para>
  38. Корректным способом создания рабочего экземпляра
  39. фронтэнда <classname>Zend_Cache</classname> является код показанный в
  40. следующем примере:
  41. </para>
  42. <programlisting language="php"><![CDATA[
  43. // Выбираем бэкэнд (например, 'File' или 'Sqlite'...)
  44. $backendName = '[...]';
  45. // Выбираем фронтэнд (например, 'Core', 'Output', 'Page'...)
  46. $frontendName = '[...]';
  47. // Устанавливаем массив опций для выбранного фронтэнда
  48. $frontendOptions = array([...]);
  49. // Устанавливаем массив опций для выбранного бэкэнда
  50. $backendOptions = array([...]);
  51. // Создаем экземпляр
  52. // (два последних аргумента являются необязательными)
  53. $cache = Zend_Cache::factory($frontendName,
  54. $backendName,
  55. $frontendOptions,
  56. $backendOptions);
  57. ]]></programlisting>
  58. <para>
  59. В последующих примерах мы предполагаем, что переменная
  60. <varname>$cache</varname> содержит инстанцированный, как показано в
  61. примере, фронтэнд, и что вы понимаете, как передавать параметры
  62. выбранному вами бэкэнду.
  63. </para>
  64. <note><para>
  65. Всегда используйте <methodname>Zend_Cache::factory()</methodname> для получения
  66. экземпляров фронтэнда. Непосредственно созданные экземпляры
  67. фронтэндов и бэкэндов будут работать не так, как ожидается.
  68. </para></note>
  69. </sect2>
  70. <sect2 id="zend.cache.tags">
  71. <title>Добавление тегов к записям</title>
  72. <para>
  73. Теги являются средством категоризации записей кэша. Когда вы
  74. производите сохранение в кэш методом <methodname>save()</methodname>, то можете
  75. установить массив тегов к данной записи. После этого вы можете
  76. удалить все записи кэша, помеченные данным тегом (тегами).
  77. </para>
  78. <programlisting language="php"><![CDATA[
  79. $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
  80. ]]></programlisting>
  81. <note>
  82. <para>
  83. Метод <methodname>save()</methodname> принимает также необязательный
  84. четвертый параметр: <varname>$specificLifetime</varname>. Если он не
  85. равен <constant>FALSE</constant>, то устанавливается время жизни
  86. текущей записи кэша.
  87. </para>
  88. </note>
  89. </sect2>
  90. <sect2 id="zend.cache.clean">
  91. <title>Очистка кэша</title>
  92. <para>
  93. Для того, чтобы удалить или сделать недействительной запись с
  94. определенным идентификатором, вы можете использовать метод
  95. <methodname>remove()</methodname>:
  96. </para>
  97. <programlisting language="php"><![CDATA[
  98. $cache->remove('idToRemove');
  99. ]]></programlisting>
  100. <para>
  101. Для того, чтобы одновременно удалить или сделать
  102. недействительными несколько записей кэша, вы можете использовать
  103. метод <methodname>clean()</methodname>. Например, чтобы удалить все записи кэша:
  104. </para>
  105. <programlisting language="php"><![CDATA[
  106. // удаление всех записей
  107. $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
  108. // удаление только устаревших записей
  109. $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
  110. ]]></programlisting>
  111. <para>
  112. Если вы хотите удалить записи кэша, помеченные тегами 'tagA' и 'tagC':
  113. </para>
  114. <programlisting language="php"><![CDATA[
  115. $cache->clean(
  116. Zend_Cache::CLEANING_MODE_MATCHING_TAG,
  117. array('tagA', 'tagC')
  118. );
  119. ]]></programlisting>
  120. <para>
  121. Если вы хотите удалить записи кэша, не помеченные тегами 'tagA' и 'tagC':
  122. If you want to remove cache entries not matching the tags 'tagA' or 'tagC':
  123. </para>
  124. <programlisting language="php"><![CDATA[
  125. $cache->clean(
  126. Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
  127. array('tagA', 'tagC')
  128. );
  129. ]]></programlisting>
  130. <para>
  131. Если вы хотите удалить записи кэша, помеченные тегами 'tagA' или 'tagC':
  132. </para>
  133. <programlisting language="php"><![CDATA[
  134. $cache->clean(
  135. Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
  136. array('tagA', 'tagC')
  137. );
  138. ]]></programlisting>
  139. <para>
  140. Доступные режимы очищения: <constant>CLEANING_MODE_ALL</constant> (удалить
  141. все), <constant>CLEANING_MODE_OLD</constant> (удалить устаревшие),
  142. <constant>CLEANING_MODE_MATCHING_TAG</constant> (удалить помеченные тегом)
  143. и <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> (удалить не помеченные
  144. тегом). Последние два, как ясно из названия, передаются вместе с
  145. массивом тегов.
  146. </para>
  147. </sect2>
  148. </sect1>
  149. <!--
  150. vim:se ts=4 sw=4 et:
  151. -->