Zend_Cache-Theory.xml 9.0 KB

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