Zend_Cache-Theory.xml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <sect1 id="zend.cache.theory">
  2. <title>缓存原理</title>
  3. <para>
  4. 在Zend_Cache中有三个关键概念.一是用于标识缓存纪录的唯一标识符(一个字符串).二是<code>'lifeTime'</code>指令,正如例子中所见,
  5. 它定义了缓存纪录的生命期(超过该值,缓存纪录被销毁).第三个关键概念是条件执行,你的部分代码可用被跳过,以加速性能.
  6. 前端函数(例如. <code>Zend_Cache_Core::get()</code>)在缓存不命中时返回false,这使用户能处理<code>if(){ ... }</code>
  7. 语句中的条件,包含代码中他们所要缓存(或者跳过)的部分,最后是否必须保存这些你曾经生成的块(例如: <code>Zend_Cache_Core::save()</code>).
  8. </para>
  9. <note><para>
  10. 在有些前端<code>Function</code>中不需要条件执行,例如,当整个逻辑在前端内部实现的时候.
  11. </para></note>
  12. <note><para>
  13. '缓存命中'是一个术语,它表示当一个缓存纪录发现可用,是有效的并且是'fresh'的(换言之,就是还没有过期).'Cache miss' 表示当在缓存中找不到需要的数据时,发生缓存不命中.
  14. 当一个Cache miss发生是,你必须生成你的数据,并使它被缓存.而对于缓存命中,后端自动透明地从Cache中取回缓存纪录.
  15. </para></note>
  16. <sect2 id="zend.cache.factory">
  17. <title><code>Zend_Cache</code> 工厂方法 </title>
  18. <para>
  19. 下面的示例给出了一个构造<code>Zend_Cache</code>前端实例的好方法:
  20. </para>
  21. <programlisting role="php"><![CDATA[
  22. // We choose a backend (for example 'File' or 'Sqlite'...)
  23. $backendName = '[...]';
  24. // 选择一个前端(例如'Core', 'Output', 'Page'...)
  25. $frontendName = '[...]';
  26. // 为选择的前端设置一个选项数组
  27. $frontendOptions = array([...]);
  28. // 为选择的后端设置一个选项数组
  29. $backendOptions = array([...]);
  30. // 创建实例(当然,最后两个参数是可选的)
  31. $cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions);
  32. ]]>
  33. </programlisting>
  34. <para>
  35. 在下面的例子中我们假设变量<code>$cache</code>保存有一个有效的,已实例化的前端,并且你知道该如何给你选择的后端传递参数.
  36. </para>
  37. <note><para>
  38. 必须使用<code>Zend_Cache::factory()</code>来得到前端实例.你自己 直接实例化的 前端或者后端 不能按照期望工作.
  39. </para></note>
  40. </sect2>
  41. <sect2 id="zend.cache.tags">
  42. <title>标记纪录</title>
  43. <para>
  44. 标记是给缓存纪录分类的一种方法.当你使用<code>save()</code>方法保存一个缓存时,你可以给该缓存纪录设置一个或多个标记,多个标记以数组形式组织在一起
  45. 此后你不再需要该缓存纪录使,你可以清除所有指定标记的缓存纪录.
  46. </para>
  47. <programlisting role="php"><![CDATA[
  48. $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
  49. ]]>
  50. </programlisting>
  51. <note><para>
  52. note than the <code>save()</code> method accepts an optional fourth argument : <code>$specificLifetime</code>
  53. (if != false, it sets a specific lifetime for this particular cache record)
  54. </para></note>
  55. </sect2>
  56. <sect2 id="zend.cache.clean">
  57. <title>缓存清理</title>
  58. <para>
  59. 删除特定id的Cache纪录,使用<code>remove()</code>方法:
  60. </para>
  61. <programlisting role="php"><![CDATA[
  62. $cache->remove('idToRemove');
  63. ]]>
  64. </programlisting>
  65. <para>
  66. 在单个操作中删除多个Cache纪录,可以使用<code>clean()</code>方法.例如,删除所有的缓存纪录:
  67. </para>
  68. <programlisting role="php"><![CDATA[
  69. // 清除所有缓存纪录
  70. $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
  71. // 仅清除过期的
  72. $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
  73. ]]>
  74. </programlisting>
  75. <para>
  76. 如果你想删除标记为'tagA'和'tagC'的缓存项:
  77. </para>
  78. <programlisting role="php"><![CDATA[
  79. $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('tagA', 'tagC'));
  80. ]]>
  81. </programlisting>
  82. <para>
  83. 可用的清除模式有:<code>CLEANING_MODE_ALL</code>, <code>CLEANING_MODE_OLD</code>,
  84. <code>CLEANING_MODE_MATCHING_TAG</code> 和 <code>CLEANING_MODE_NOT_MATCHING_TAG</code>.
  85. 后面的,正如它名称所暗示的,在清除操作中组合了一个标记数组,对其中的每个元素作处理.
  86. </para>
  87. </sect2>
  88. </sect1>
  89. <!--
  90. vim:se ts=4 sw=4 et:
  91. -->