ニュース項目の大きなリストを取得しています。
明らかな理由から、このリストのキャッシュを利用したいと考えています (必要以上にクエリを実行することはできません)。
このリストを、ページングを有効にするために拡張したリピーターにバインドします (ページ間をフリックするとページが読み込まれ、リストが再度取得されます)。
複雑なのは、ニュース項目を日付で照会する場合にのみ存在するクエリ文字列「年」から、これらのニュース項目を日付で照会することもできるという事実です。
以下は、これまでの疑似コードです (実際のコードをここに貼り付けると、混乱を招くだけのすべてのビットを削除するのに時間がかかりすぎます)。
if(complete news items list are not cached OR querystring["year"] != null)
{
Int year = queryString["year"] (could be null)
Cache.Add(GetNewsItems(year));
}
else
{
return cached newsItems;
}
問題は、(ページング コントロールのポストバックが原因で) ニュース アイテム ページが読み込まれるときに、クエリ文字列の [年] パラメータがまだ設定されているため、GetNewsItems が再実行されることです。また、ホーム URL (つまり、クエリ文字列なし) に移動した場合でも、事実上、ニュース アイテムのキャッシュ バージョンが存在するため、わざわざそれらを取得しようとすることはありませんが、特定の年にはそこに存在する場合があります (MAY)。したがって、「すべての年」の種類の検索には関係ありません。
最近行った検索にフラグを付けるために、新しいキャッシュ エントリを追加する必要がありますか? キャッシュのタイムアウトを発生させるために、ここでどのような考慮事項を行う必要がありますか? 必要に応じて新しいクエリ文字列を追加できます (できれば追加しないでください) - これで問題は解決しますか?