<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.yac.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'yac.dump.php',
    1 => 'Yac::dump',
    2 => '导出缓存条目以便检查',
  ),
  'up' => 
  array (
    0 => 'class.yac.php',
    1 => 'Yac',
  ),
  'prev' => 
  array (
    0 => 'yac.delete.php',
    1 => 'Yac::delete',
  ),
  'next' => 
  array (
    0 => 'yac.flush.php',
    1 => 'Yac::flush',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'reference/yac/yac/dump.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="yac.dump" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">Yac::dump</h1>
  <p class="verinfo">(PECL yac &gt;= 1.0.0)</p><p class="refpurpose"><span class="refname">Yac::dump</span> &mdash; <span class="dc-title">导出缓存条目以便检查</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-yac.dump-description">
  <h3 class="title">说明</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="modifier">function</span> <span class="methodname"><strong>Yac::dump</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$limit</code><span class="initializer"> = 100</span></span>, <span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$offset</code><span class="initializer"> = 0</span></span>): <span class="type"><a href="language.types.array.php" class="type array">array</a></span></div>

  <p class="simpara">
   导出当前缓存储存的条目的元数据。值本身不会被返回。
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-yac.dump-parameters">
  <h3 class="title">参数</h3>
  <dl>
   
    <dt><code class="parameter">limit</code></dt>
    <dd>
     <p class="simpara">
      返回条目的最大数量。
     </p>
     <p class="simpara">
      <code class="parameter">limit</code> 传 <code class="literal">-1</code> 会导出缓存当前持有的全部条目。注意，对大型缓存构建完整列表可能占用可观的内存；内存紧张时，请改用 <code class="parameter">limit</code> 和 <code class="parameter">offset</code> 分页遍历。
     </p>
    </dd>
   
   
    <dt><code class="parameter">offset</code></dt>
    <dd>
     <p class="simpara">
      收集前跳过的条目数。该参数自 PECL yac 2.4.0 起可用；更早的版本总是从第一个条目开始。结合 <code class="parameter">limit</code>，可用于对储存条目超过单次调用返回上限的缓存进行分页遍历。
     </p>
    </dd>
   
  </dl>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-yac.dump-returnvalues">
  <h3 class="title">返回值</h3>
  <p class="simpara">
   返回一个 <span class="type"><a href="language.types.array.php" class="type array">array</a></span>，每个导出的条目对应一个元素。每个元素本身也是描述该条目的数组：
  </p>
  <dl>
   
    <dt><code class="literal">index</code></dt>
    <dd><p class="simpara">
     条目在哈希表中的槽位索引。
    </p></dd>
   
   
    <dt><code class="literal">hash</code></dt>
    <dd><p class="simpara">
     键的 64 位哈希值，用于槽位探测。
    </p></dd>
   
   
    <dt><code class="literal">crc</code></dt>
    <dd><p class="simpara">
     存储值的 CRC32 校验和，用于检测撕裂读取（torn read）。内嵌（embedded）条目没有值块，该字段为 <code class="literal">0</code>。
    </p></dd>
   
   
    <dt><code class="literal">ttl</code></dt>
    <dd><p class="simpara">
     过期时间戳（Unix 时间）。<code class="literal">0</code>
     表示条目永不因时间过期。注意 <span class="methodname"><a href="yac.delete.php" class="methodname">Yac::delete()</a></span>
     只是把条目标记为过期，因此已删除的条目仍可能出现在导出结果中；
     <code class="literal">ttl</code> 非零且在过去，表明条目已过期或已被删除。
    </p></dd>
   
   
    <dt><code class="literal">k_len</code></dt>
    <dd><p class="simpara">
     键的长度，单位为字节。
    </p></dd>
   
   
    <dt><code class="literal">v_len</code></dt>
    <dd><p class="simpara">
     值的长度，单位为字节。对于被压缩的条目，这是压缩<em>前</em>原始值的长度（自 yac 2.4.0 起；更早的版本报告的是存储的压缩后长度）。
    </p></dd>
   
   
    <dt><code class="literal">c_len</code></dt>
    <dd><p class="simpara">
     仅被压缩的条目有此字段（自 yac 2.4.0 起）：实际存入共享内存的压缩数据长度，单位为字节。对比 <code class="literal">c_len</code> 和 <code class="literal">v_len</code>
     可以看出每个条目通过压缩节省了多少空间。
    </p></dd>
   
   
    <dt><code class="literal">size</code></dt>
    <dd><p class="simpara">
     值块在共享内存中分配的大小，单位为字节。内嵌条目为 <code class="literal">0</code>。
    </p></dd>
   
   
    <dt><code class="literal">atime</code></dt>
    <dd><p class="simpara">
     最后访问时间（Unix 时间），每次成功的
     <span class="methodname"><a href="yac.get.php" class="methodname">Yac::get()</a></span> 都会更新它。缓存写满时，候选槽位中 <code class="literal">atime</code>
     最旧的条目会最先被驱逐（自 yac 2.4.0 起）。
    </p></dd>
   
   
    <dt><code class="literal">hits</code></dt>
    <dd><p class="simpara">
     每个条目的命中计数器，每次成功的
     <span class="methodname"><a href="yac.get.php" class="methodname">Yac::get()</a></span> 都会使其递增；当条目被新的 <span class="methodname"><a href="yac.set.php" class="methodname">Yac::set()</a></span> 或
     <span class="methodname"><a href="yac.add.php" class="methodname">Yac::add()</a></span> 覆盖时重置（自 yac 2.4.0 起）。
    </p></dd>
   
   
    <dt><code class="literal">embedded</code></dt>
    <dd><p class="simpara">
     值是否直接存储在槽位内部，而不是单独的值块中（自 yac 2.4.0 起）。小值——<strong><code><a href="reserved.constants.php#constant.null">NULL</a></code></strong>、布尔值、小整数、不超过 7 字节的字符串和空数组——以内嵌方式存储，完全不占用值内存；这类条目的 <code class="literal">crc</code> 和 <code class="literal">size</code>
     均报告为 <code class="literal">0</code>。
    </p></dd>
   
   
    <dt><code class="literal">key</code></dt>
    <dd><p class="simpara">
     缓存键，不包含实例前缀。
    </p></dd>
   
  </dl>
 </div>


 <div class="refsect1 examples" id="refsect1-yac.dump-examples">
  <h3 class="title">示例</h3>
  <div class="example" id="example-1">
   <p><strong>示例 #1 <span class="methodname"><strong>Yac::dump()</strong></span> 示例</strong></p>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$yac </span><span style="color: #007700">= new </span><span style="color: #0000BB">Yac</span><span style="color: #007700">();
</span><span style="color: #0000BB">$yac</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #DD0000">"foo"</span><span style="color: #007700">, </span><span style="color: #DD0000">"bar"</span><span style="color: #007700">);
</span><span style="color: #0000BB">$yac</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #DD0000">"baz"</span><span style="color: #007700">, </span><span style="color: #DD0000">"qux"</span><span style="color: #007700">);

</span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$yac</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dump</span><span style="color: #007700">());
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

   <div class="example-contents"><p>以上示例的输出类似于：</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Array
(
    [0] =&gt; Array
        (
            [index] =&gt; 12345
            [hash] =&gt; 14463105906481965911
            [crc] =&gt; 0
            [ttl] =&gt; 0
            [k_len] =&gt; 3
            [v_len] =&gt; 3
            [size] =&gt; 0
            [atime] =&gt; 1725955200
            [hits] =&gt; 0
            [embedded] =&gt; 1
            [key] =&gt; foo
        )

    [1] =&gt; Array
        (
            [index] =&gt; 12987
            [hash] =&gt; 15132029420525657053
            [crc] =&gt; 0
            [ttl] =&gt; 0
            [k_len] =&gt; 3
            [v_len] =&gt; 3
            [size] =&gt; 0
            [atime] =&gt; 1725955200
            [hits] =&gt; 0
            [embedded] =&gt; 1
            [key] =&gt; baz
        )

)</pre>
</div>
   </div>
   <div class="example-contents"><p>
    条目按槽位顺序列出，而不是按存储顺序。内嵌条目（直接保存在槽位内部的小标量）的
    <code class="literal">crc</code> 和 <code class="literal">size</code> 为零；存储在独立值块中的条目带有校验和与块大小，被压缩的条目还额外带有 <code class="literal">c_len</code>。
   </p></div>
  </div>
  <div class="example" id="example-2">
   <p><strong>示例 #2 分页遍历大型缓存</strong></p>
   <div class="example-contents"><p>
    <code class="parameter">limit</code> 限制单次调用返回的条目数，
    <code class="parameter">offset</code> 表示收集前跳过的条目数，两者组合即可对储存条目超过单次调用返回上限的缓存进行分页遍历。
   </p></div>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$yac </span><span style="color: #007700">= new </span><span style="color: #0000BB">Yac</span><span style="color: #007700">();

</span><span style="color: #FF8000">// 先往缓存里填 250 个条目
</span><span style="color: #007700">for (</span><span style="color: #0000BB">$i </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$i </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">250</span><span style="color: #007700">; </span><span style="color: #0000BB">$i</span><span style="color: #007700">++) {
    </span><span style="color: #0000BB">$yac</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #DD0000">"key</span><span style="color: #0000BB">$i</span><span style="color: #DD0000">"</span><span style="color: #007700">, </span><span style="color: #0000BB">$i</span><span style="color: #007700">);
}

</span><span style="color: #0000BB">$page_size </span><span style="color: #007700">= </span><span style="color: #0000BB">100</span><span style="color: #007700">;
</span><span style="color: #0000BB">$page_num  </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;

</span><span style="color: #FF8000">// 跳过前 100 个条目，返回接下来的 100 个（第 2 页）
</span><span style="color: #0000BB">$page </span><span style="color: #007700">= </span><span style="color: #0000BB">$yac</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$page_size</span><span style="color: #007700">, </span><span style="color: #0000BB">$page_size </span><span style="color: #007700">* (</span><span style="color: #0000BB">$page_num </span><span style="color: #007700">- </span><span style="color: #0000BB">1</span><span style="color: #007700">));

</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$page</span><span style="color: #007700">));
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

   <div class="example-contents"><p>以上示例的输出类似于：</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">int(100)</pre>
</div>
   </div>
   <div class="example-contents"><p>
    当缓存中的条目数少于请求页覆盖的范围时，返回的条目数会少于请求数；当 offset 指向最后一个已占用槽位之后时，返回空数组。
   </p></div>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-yac.dump-seealso">
  <h3 class="title">参见</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="methodname"><a href="yac.info.php" class="methodname" rel="rdfs-seeAlso">Yac::info()</a> - 获取缓存状态</span></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>