あなたの質問を要約しましょう。クエリ結果をキャッシュしたいのですが、どうすればいいですか?
質問に答える前に、ソリューション (フラット ファイルに保存) を提案しています。確かに、あなたはそれを行うことができます。しかし、ちょっとしたインフラストラクチャを作成する場合は、キャッシュ データ クラスを作成して、あらゆる種類のものをキャッシュしてみませんか。3つのプロパティを持つことができます
-- キャッシュ アイテム名 -- キャッシュ アイテムの値 -- キャッシュ アイテムの最終更新のタイムスタンプ
いくつかの機能を追加する
function loadCachedData($itemName);
//see if more time has passed than in the cache expiration window
function isLoadedDataFresh($expirationWindowInSeconds);
function getLoadedItemValue();
function storeCacheValueForItem($itemName, $value);
アイテムを選択するためのクエリを既に作成する必要があるため、コントローラーで次のようにします。
$cacheHandle = new Cache();
$cacheHandler->loadCachedData('whateverMyVarIs');
$displayValue = '';
if($cacheHandler->isLoadedDataFresh(60 * 60 * 24) ) //sec*min*hour = 1 day
{
$displayValue = $cacheHandler->getLoadedItemValue();
}
else
{
//update the display value here with your real query
$displayValue = doMyStuff();
$cacheHandler->storeCacheValueForItem('whateverMyVarIs', $displayValue);
}
もちろん、そのコードを完全にクリーンアップし、有効期限ウィンドウを定数に変えて、クラスを実装する必要がありますが、それほど難しくはありません。さらに、あなたはすでにデータベースを持っています..それでキャッシュクラスをバックし、キャッシュしてください!!! または、高速キャッシングのためにさらに優れたツールを使用したい場合は、memcached を使用してください!! http://www.danga.com/memcached/
しかし最後に、私はただ尋ねなければなりません...あなたは時期尚早に最適化していますか? このページのパフォーマンスについて誰かが本当に不満を言っていますか?