1

Zend_Cachezendフレームワークを使用して、メモリ内のスクリプトキャッシュのソリューションを探しています。

このアプリケーションにはいくつかのケースがあります。たとえば、100個の要素を含むテーブルを表示するためのロジックは、次のとおりです。

  • コンテンツテーブルから100個のアイテムをフェッチします(単一のクエリ)
  • すべてのアイテムについて、作成者ユーザーと、db / memcacheバックエンドからコンテンツを承認したユーザーを取得します(これは通常、forループから実行されます)

ほとんどの場合、コンテンツを承認したユーザーは2人または3人の管理者ユーザーですが、スクリプトはデータベース/memecacheを複数回呼び出します。さらに悪いことに、ユーザーモデルは、ユーザーがどの役割に属し、どのコミュニティにも属しているかを知るために3つの異なるテーブルを照会する必要があります。

したがって、全体として、100アイテムのテーブルを表示するために、データベース(またはmemcacheサーバー)に600回クエリを実行します:-)

私はここで2つの解決策について考えていました:

  • ループ内のusersテーブルをクエリしないでください。100個のアイテムをループし、すべてのユーザーIDを取得し、1回のクエリですべてのユーザーを取得します。これが適切な解決策になるかどうかはわかりません。SQL結合を記述して、モデル関数が非を返すようにする必要がZend_Db_Table_Rowあるためです。これは、頻繁に使用します。

  • 別の解決策は、最初のロード時にユーザーオブジェクトをメモリ内キャッシュ配列に保存することです。次にループがユーザーIDを読み取ろうとすると、最初にこの「特別な」メモリキャッシュで検索されます。Zend_Registryここでの解決策と同様に、キャッシュバックエンドとして使用することを考えていました: http ://sameerparwani.com/posts/using-zend_registry-as-a-zend_cache-backend

memcacheサーバーを使用しますが、スクリプトはmysqlデータベースにクエリを実行する代わりに、memcacheサーバーに数百回クエリを実行するだけです。memcacheサーバーにクエリを実行する方が高速ですが、スクリプトはすでにこのデータを読み込んでいるため、外部サーバーにクエリを実行するのではなく、スクリプト「メモリ」を使用したいと思います。

4

1 に答える 1

2

FaZendを見てください。その実装があります。コードを調べると、少し異なる動作をするはずです (たとえば、TTL がない、test() がブール値を返す) が、それで十分かもしれません。未検証 !

編集:

Zend Framework 2 以降、Zend\Cache\Storage\Adapter\Memoryの実装があります。

于 2012-04-03T22:45:30.703 に答える