8

私のグーグルフーは私が探しているものを明らかにしていないので、私はこれを群衆に出している。

ASP.NET開発のバックグラウンドから来て、私は、めったに変更されないが頻繁に使用されるリソース(データベースからのルックアップ行や静的XMLドキュメントのコンテンツなど)をメモリに格納するために、Applicationおよびコレクションを利用できるようにすることに慣れています。 CacheWebサーバーのので、リクエストのたびにこれらの頻繁に使用されるアイテムをリロードする必要はありません。

PHPには同等のものがありますか?memcache拡張機能について簡単に説明しましたが、これは機能しません(サーバー構成を制御できないため)。事前解析または事前準備を可能にする何かを実装したいと思います。 -リソースを選択し、ファイルに格納されているリテラルからキャッシュされたオブジェクトを構築する一種のPHPキャッシュ「ファイル」を生成しますが、これは私には非常にハッキーな解決策のようです。

PHP(または、ある種のヘルパーライブラリ)に、ベストプラクティスを使用してこれを実現できるものはありますか?

4

3 に答える 3

5

要するに、いいえ、そのようなものはPHPでネイティブに利用できません。その理由を理解するには、PHPの環境全体がリクエストごとに構築されており、その後、リクエストの最後に破棄されることを理解する必要があります。PHP、セッションごとの変数を格納するための$ _SESSIONを提供しますが、ドキュメントを掘り下げると、その変数が各リクエスト中にも作成されることがわかります。PHP(またはより具体的にはmod php)は、他の「アプリケーションサーバー」とは根本的に異なります。基本的には、アプリケーションサーバーではありません。リクエストごとのスクリプトランナーです。

誤解しないでください。PHPではアプリケーションレベルのデータストアを実行できますが、取得するにはデータベースまたはディスクに移動する必要があります。ただし、パフォーマンスが問題であることが示されるまで、パフォーマンスの最適化について心配する必要はありません。そして、100回のうち99回は、パフォーマンスがあなたが書いた貧弱なコードが原因ではない問題になるまでに、あなたはあなた自身のかわいいmemcachedサーバーを構築するためのリソースを持っていると思います。

于 2009-11-16T05:28:16.213 に答える
0

たとえば、Zend_Cacheライブラリを見てください。複数のバックエンドにキャッシュできます。

于 2009-11-16T05:18:04.283 に答える
0

これはちょっとしたハックですが、php7+で動作します

基本的に、データを一時ファイルにキャッシュしてから、includeを使用してファイルを読み取ります。このファイルは、phpエンジンのメモリ内ファイルキャッシング(opcache)によってメモリにキャッシュされます。

function cache_set($key, $val) {
   $val = var_export($val, true);
   // HHVM fails at __set_state, so just use object cast for now
   $val = str_replace('stdClass::__set_state', '(object)', $val);
   // Write to temp file first to ensure atomicity
   $tmp = "/tmp/$key." . uniqid('', true) . '.tmp';
   file_put_contents($tmp, '<?php $val = ' . $val . ';', LOCK_EX);
   rename($tmp, "/tmp/$key");
}

そして、キャッシュから値を「取得」する方法は次のとおりです。

function cache_get($key) {
    @include "/tmp/$key";
    return isset($val) ? $val : false;
}

https://medium.com/@dylanwenzlau/500x-faster-caching-than-redis-memcache-apc-in-php-hhvm-dcd26e8447adから

于 2021-05-12T22:00:46.160 に答える