0

潜在的に処理できるデータがたくさんありますが、ほとんど変更されず、時々キャッシュを更新することはまったく問題ありませんが、理想的には、新しいデータがテーブルに入ったときにのみキャッシュが更新されます。

私は、CakePHP がテーブル全体をキャッシュし、ファイル キャッシュのような遅いキャッシングを使用しても、それを処理できることを理解して構築しました。つまり、すべての情報に対して 1 回クエリを実行し、「findById(54)」と言うと、そのキャッシュで ID 54 を検索して処理します。ID 54 のコンテンツだけをキャッシュしたくはありません。また、既に行ったコードの変更も避けたいと考えています。findAll() を一度だけキャッシュしてキャッシュすることが可能であることはわかっていますが、それを念頭に置いて構築したわけではなく、必要がなければすべてを実行したくありません。

私の質問は、どうすれば CakePHP にテーブル全体をキャッシュさせ、そのキャッシュからクエリを取得させることができるでしょうか? 出来ますか?私はmemcachedを使用することにオープンですが、最初はファイルキャッシュのみを使用することを考えています。

4

1 に答える 1

3

たくさんのデータがあります

「たくさん」はいくらですか?

AppModelのfindメソッドをオーバーライドします

必要な操作を行う簡単な方法は、アプリモデルで検索呼び出しをハイジャックし、キャッシュされた結果があればそれを返すことです。これは次のようになります。

public function find($type = 'first', $params = array()) {
    $key = md5(serialize(func_get_args());
    $return = Cache::read($key);
    if (false !== $return) {
        return $cacheResult;
    }

    $return = parent::find($type, $params);
    Cache::write($key, $return);
    return $return;
}

このようにして、dbを使用するときにキャッシュにデータを入力し、キャッシュを無効にしたり、空のキャッシュを使用したりしても、サイトを機能させることができるという利点があります。

于 2013-02-13T22:40:10.843 に答える