MVCアプリケーションのビューレベルでキャッシュを実装しようとしています。アプリケーションは、カスタムPHP MVC +いくつかのzendライブラリですが、私はその質問がどのMVCスタックにも当てはまると思います。インデックスまたはタグを使ってキャッシュ用のライブラリがありますか?
私が達成したいのは、部分/ブロックは無効にするがページ全体を無効にするキャッシュです。 ビューはレイアウトで構成され、各レイアウトはブロック/パーシャルで構成され、各パーシャル自体は再びパーシャルで構成されます。普通ではない。部分データの多くは同じデータを使用し、データが変更された場合はすべて無効にする必要があります。同じように、一部のパーシャルは異なるモデルのデータを使用し、データが変更されると無効にする必要があります。
私が達成したいのは、新しい部分またはレイアウトが作成されるたびにコードを変更するためにモデルに戻る必要がないシステムです。私の考えは、各キャッシュ項目が何らかの形で「タグ付け」されている可能性があるということでした。データレベルでは、そのタグを使用してすべてのキャッシュ項目を無効にできます。新しいパーシャルを作成する場合は、キャッシュされたブロック内で使用されているすべてのタグでタグ付けする必要があります。
タグを関連するすべてのCacheIdとリンクするキャッシュにインデックスを格納すると想像できます。
質問1:このようなライブラリは存在しますか?私は車輪を再発明することは嫌いだ。
質問2:ORには異なる「ベストプラクティス」があり、私の推論には欠陥があります。
推敲:
はちょうど私が達成するためにwan'tものに近いあるこの出くわしたが、PHP http://37signals.com/svn/posts/3112-how-basecamp-next-got-to-be-so-damn-fast-without-using-much-client-side-ui
に私の質問は、そのようにするとき、私は、データへのキャッシュキーをマップ行う方法ですデータが更新されます無効にするキャッシュを知っていますか?キャッシュキーがビューに設定され、クリアはモデル(onSave、onDelete)で行われます。どのモデルがどのキャッシュを削除すべきかをモデルはどのように知っていますか?たとえば
:以下のビューにキャッシュされ
は、それぞれ、検索のための一意のキーを生成します。
部分1:ユーザーYによって
製品X = partial1/x.id-y.idユーザYによって
生成物Z = partial1/z.id-y.id
と私は同じ使用再びユーザが、コメント
部分2は、この時間:ユーザーYによって
コメントA = partial2/a.id-y.id
ユーザによる コメントB Y = partial2/b.id-y.id
今、ユーザーを更新するとyのonSaveでは、yに依存するすべてのキャッシュされた部分を知ることができません。私はすることができますが、私はすべてのキャッシュキーを取得し、yがそれらにある場合は、1つずつテストする必要があります。
キーがy.idに依存するマップを維持すると、キーの名前がわからなくても簡単にキャッシュをクリアできます。ビューレベルがインデックスを満たすと、モデルはキーを使用してキーをルックアップし、それらのキャッシュを無効にできます。したがって、上記の例では、キャッシュを作成した後、私は、次のインデックスだろう:
x.id = [partial1/x.id-y.id]
z.id = [partial1/z.id-y.id]
a.id = [partial2/a.id-y.id]
b.id = [partial2/b.id-y.id]
y.id = [partial1/x.id-y.id, partial1/x.id-y.id, partial1/z.id-y.id,
partial2/a.id-y.id, partial2/b.id-y.id]
、これは私が達成しようとしているものをアップクリア願っています。 –