0

MVC4 Web サイトがあり、OutputCache を使用して、ランク付けされた結果の複数のページを表示するビューの結果をキャッシュしています。キャッシュされた出力は、Page パラメータによって異なります。ランキングは時間の関数であるため、特定のページの結果は、キャッシュされる時期によっては同期されない可能性があります。これは、重複した結果を表示できる無限スクロール メカニズムを使用しているという事実によって悪化します。結果が次のページにプッシュされた場合。

この問題の理想的な解決策は、妥当な数のページを一度にキャッシュすることです。これには、キャッシュされた出力の有効期限が切れているかどうかを確認し、有効期限が切れている場合はキャッシュされた結果を再生成して、キャッシュされた応答を返すことができる必要があります。これは可能ですか?

また、私は Azure 出力キャッシュ プロバイダーで OutputCaching を使用しており、専用のキャッシュ ロールを持っていることにも注意してください (注:共有キャッシュ サービスではありません)。

どんな助けでも大歓迎です。

4

1 に答える 1

1

これには、キャッシュされた出力の有効期限が切れているかどうかを確認し、有効期限が切れている場合はキャッシュされた結果を再生成して、キャッシュされた応答を返すことができる必要があります。これは可能ですか?

これはまさに OutputCaching の仕組みです。ページがキャッシュに存在し、有効期限が切れていない場合はページを要求し、キャッシュから取得します。それ以外の場合は、ページをレンダリングしてキャッシュを更新します。

データが実際にこのように動的である場合、パフォーマンスの向上を実現せずに出力をキャッシュすることで、おそらくより多くの作業/問題を引き起こしている可能性があります (KISS がここに適用されます! そもそも問題を回避できる場合は、問題の解決策を作成しないでください) )。

ただし、(本当に必要な場合) 説明したようにソリューションを設計するには、Azure キューとワーカー ロールを使用できます。評価が追加/更新されたときに、評価エンジンがキューに値を詰め込むようにします。次に、Worker ロールに (たとえば) 毎秒キューの値をポーリングさせます。値が見つかった場合、Worker ロールはキャッシュされたページに対して Web リクエストを実行します。これにより、有効期限が切れた場合に出力キャッシュが更新されます。ただし、キャッシュの有効期限によってまだ制限されています。この SO 投稿のようなことをしない限り):

HttpResponse.RemoveOutputCacheItem() はおそらく使用したいメソッドです。アクションがキャッシュされている名前がわかれば、特定のアクションだけを削除できます (ブレークポイントを設定するか、キャッシュされたアイテムのすべての名前を画面にダンプしてみてください)。

于 2013-03-13T01:29:19.767 に答える