現在の位置: ホーム> 最新記事一覧> APCU_FETCHおよびAPCU_EXISTSを使用してキャッシュプリロード機能を実装する方法は?

APCU_FETCHおよびAPCU_EXISTSを使用してキャッシュプリロード機能を実装する方法は?

gitbox 2025-09-16
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// ---------------------------</span></span><span>
</span><span><span class="hljs-comment">// 次の部分は、記事の内容とは何の関係もありません</span></span><span>
</span><span><span class="hljs-comment">// と見なすことができます PHP ファイルの先頭にある標準宣言またはコメント</span></span><span>
</span><span><span class="hljs-comment">// ---------------------------</span></span><span>

</span><span><span class="hljs-comment">// ---------------------------</span></span><span>
</span><span><span class="hljs-comment">// テキストを開始します</span></span><span>
</span><span><span class="hljs-comment">// ---------------------------</span></span><span>

<span class="hljs-comment">/**
 * 一致する方法 apcu_fetch そして apcu_exists キャッシュプリロード関数を実装します?
 * 
 * 存在する PHP で使用されます APCu(Alternative PHP Cache User)アプリケーションのパフォーマンスを大幅に改善できます,
 * 特に頻繁に読むデータの場合,構成ファイルなど、人気のある検索結果など。。
 * キャッシュヒット率を最適化するため,組み合わせることができます apcu_exists そして apcu_fetch キャッシュのプリロードを実装します。
 * 
 * 1. 理解する apcu_exists そして apcu_fetch
 * 
 * - apcu_exists($key) :用于判断キャッシュ中是否存存在する指定的 key。
 * - apcu_fetch($key, &amp;$success) :キャッシュから取得してみてください key 対応する値,如果存存在する则返回对应值,それ以外の場合は戻ります false。$success パラメーターはに設定されます true または false。
 * 
 * 2. プリロードキャッシュのアイデア
 * 
 * キャッシュプリロードの中心的な目標はです:如果キャッシュ不存存在する,事前にデータを生成し、キャッシュに書き込みます,从而避免每次请求都重新计算または查询数据库。
 * 
 * 典型的なプロセスは次のとおりです:
 * 
 * a. 检查キャッシュ是否存存在する:
 *    使用 apcu_exists($key) 判断,戻ってくる場合 false,キャッシュミスを意味します,プリロードが必要です。
 * 
 * b. プリロードデータ:
 *    根据业务逻辑从数据库または其他数据源获取数据。
 * 
 * c. キャッシュに書き込みます:
 *    使用 apcu_store($key, $value, $ttl) データをキャッシュに保存します,で $ttl キャッシュ有効期間です。
 * 
 * d. キャッシュを取得します:
 *    使用 apcu_fetch($key) キャッシュを読むには,这样保证即使并发请求中有一个先キャッシュに書き込みます,後続のリクエストを直接取得できます。
 * 
 * 3. サンプルコード
 */</span>

</span><span><span class="hljs-variable">$cacheKey</span></span><span> = </span><span><span class="hljs-string">'user_config'</span></span><span>;
</span><span><span class="hljs-variable">$cacheTTL</span></span><span> = </span><span><span class="hljs-number">3600</span></span><span>; </span><span><span class="hljs-comment">// キャッシュ 1 時間</span></span><span>

</span><span><span class="hljs-comment">// 检查キャッシュ是否存存在する</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">apcu_exists</span></span><span>(</span><span><span class="hljs-variable">$cacheKey</span></span><span>)) {
    </span><span><span class="hljs-comment">// プリロードデータ,たとえば、データベースから取得します</span></span><span>
    </span><span><span class="hljs-variable">$data</span></span><span> = [
        </span><span><span class="hljs-string">'theme'</span></span><span> =&gt; </span><span><span class="hljs-string">'dark'</span></span><span>,
        </span><span><span class="hljs-string">'language'</span></span><span> =&gt; </span><span><span class="hljs-string">'zh-CN'</span></span><span>,
        </span><span><span class="hljs-string">'items_per_page'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>
    ];
    </span><span><span class="hljs-comment">// キャッシュに書き込みます</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">apcu_store</span></span><span>(</span><span><span class="hljs-variable">$cacheKey</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-variable">$cacheTTL</span></span><span>);
}

</span><span><span class="hljs-comment">// 从キャッシュ中获取数据</span></span><span>
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">apcu_fetch</span></span><span>(</span><span><span class="hljs-variable">$cacheKey</span></span><span>, </span><span><span class="hljs-variable">$success</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$success</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"キャッシュ加载成功: "</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"キャッシュ获取失败,データを再生する必要があります"</span></span><span>;
}

<span class="hljs-comment">/**
 * 4. 注意すべきこと
 * 
 * - 避免存在する高并发场景下重复生成キャッシュ,可以使用锁机制または check-and-set プラン。
 * - 定期清理过期キャッシュ,メモリがあまりにも多くないようにしてください。
 * - apcu_exists そして apcu_fetch 組み合わせて使用​​できます,直接使用することもできます apcu_fetch と返品 $success 判断是否存存在する,这样可以减少一次キャッシュ访问。
 * 
 * 要約します:
 * マッチ apcu_exists そして apcu_fetch 可以有效实现キャッシュ预加载,推進する PHP アプリケーションのパフォーマンス。キーはです:
 * - 先检查キャッシュ是否存存在する
 * - 不存存在する时生成数据并存入キャッシュ
 * - 使用 apcu_fetch キャッシュを取得します内容
 */</span>
 
</span><span><span class="hljs-comment">// ---------------------------</span></span><span>
</span><span><span class="hljs-comment">// 次の部分は、記事の内容とは何の関係もありません</span></span><span>
</span><span><span class="hljs-comment">// と見なすことができます PHP 文件尾部的结束标记または额外注释</span></span><span>
</span><span><span class="hljs-comment">// ---------------------------</span></span><span>

</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>