2

この質問はおそらく以前に尋ねられたものですが、私はまだ何を使うべきかを決めることができません。私は小さなAPIラッパーを構築していますが、そのメソッドで取得したデータのキャッシュを使用できるメソッドがいくつかあります。

データはJSON形式です。そのため、閲覧中に、このデータを保存するためのいくつかの解決策を見つけました。それらの1つはAPCで、これはかなりきちんとしていて、クライアント側でlocalStorageを使用するのに似ているように見えました。しかし、これはPHPがプリインストールされていない拡張機能であり、最新バージョンのPHPにはいくつかのバグがあることがわかりました(開発者はそれが安定しているとは考えていません)。また、ローカルでテストできるようにXAMPPに追加するのに苦労しました。

そこで、それを省略して、サーバー上にファイルを作成するなどの他のオプションを検討しました。これも、フォルダを作成するときにあまり便利ではないchmodことに気付くまでは、かなり良いアイデアのように思えました。0755最初は自分がやったことだと思っていましたが、ここでセーフモードについての投稿を読んだのですが、モードを使用してフォルダを作成することはできません0777。だから私は解決策を探していました、そして私はFTPを使うことがそれを解決するだろうとわかりました。FTPを試してみましたが、うまくいきました。タイムアウトするまで接続を開いたままにして、FTPに接続して作成したメソッドを呼び出すたびに接続を上書きしないようにする方法を実装するのに苦労しました。フォルダ。

私が聞いたもう1つの解決策は、私が間違っていなければMemcacheですが、それはオーバーヘッドのように見えました。

そのため、データをキャッシュするために何を使用すべきかについて少し疑問があります。誰かがいくつかのポインタを持っているなら、それはありがたいです:)

4

3 に答える 3

5

何をするにしても、独自のキャッシングソリューションを作成しないでください。それができる人は、SOで質​​問する必要はありません。

  • APCをインストールします。それはそれが作成するよりはるかに多くの問題を解決します。
  • MemcacheやRedisを使用して、オブジェクト(セッション、スコアなど)をキャッシュします。
  • Varnishを使用して、Webサーバーの前にHTMLをキャッシュします。

私は、APC、Redis、Memcache、Varnishの組み合わせを使用して、1秒あたり10,000を超えるリクエストを処理するアプリに取り組んできました。彼らはとてもとても良いです

于 2013-02-06T08:16:42.720 に答える
1

私は開発にMacを使用しており、次のようなものを使用してphpからフォルダーを作成します。

$oldmask = umask(0);
chmod($structure, 0777);
umask($oldmask);

あなたがWindowsmabyを使用している場合、それはいくつかのWindows設定用です...私は多くのWindowsの経験をする必要はありません。

フォルダの作成で問題が発生した場合は、MySQLにキャッシュを作成することもできます。

キャッシュする必要のある結果のmd5ハッシュを作成し、結果とタイムスタンプをデータベースのテーブルcacheTblに保存してみてください。

キャッシュを保存するときは、そのデータをキャッシュする必要がある時間を現在の時刻に追加します。

次に、このデータが必要な場合は、最初にデータベースを調べて、要求したものに有効なキャッシュがあるかどうかを確認します。キャッシュにない場合は、データを生成して保存します。次のリクエスト。

これは、2つの単純な関数を作成することで簡単に作成できます。

SetCache($hash, $content, $seconds);

GetCache($hash);

メソッドの結果をキャッシュする必要がある場合は、メソッドがキャッシュするデータを生成した後にSetCache関数を呼び出し、$hashをメソッド名のようなものに設定します。

メソッドに加えて、GetCacheに有効なキャッシュがあるかどうかを確認し、そこから結果を取得してメソッドを終了するか、キャッシュがない場合は、残りのメソッドを実行して次のリクエストのためにキャッシュを保存します。

後でcronjobを追加して、すべての古いキャッシュをクリーンアップできます。

メモリキャッシュが必要な場合は、http: //memcached.org/を参照してください。

于 2013-02-06T08:52:36.420 に答える
1

これは、 2つの関数を設定して簡単に試すことができます。 まず、キャッシュからオブジェクトを取得します。nullの場合は、クエリを実行し、APIがJSON、XML、またはここで好きなものを取得し、600秒でキャッシュに戻し、500、1000hay10,000の訪問者などにサービスを提供します。

このキャッシュを使用すると、php.iniに触れたり、memcacheやAPCのように設定するためのroot権限について心配したりする必要はありません。

<?php
    include("php_fast_cache.php");
    // try to get from Cache first.
    $html = phpFastCache::get("keyword,page");

    if($html == null) {
        $html = Render Your Page || Widget || "Hello World";
        phpFastCache::set("keyword,page",$html,600);
    }

    echo or return your $html;
?>
于 2013-04-28T05:46:53.157 に答える