我正在检索一大堆新闻项目。
出于明显的原因,我想利用此列表的缓存(运行查询超过必要不会这样做)。
我将此列表绑定到我已扩展以启用分页的转发器(在页面之间轻弹会导致页面加载,因此会再次检索列表)。
复杂之处在于,这些新闻项目也可以从查询字符串“年”中按日期查询,该查询字符串仅在按日期查询新闻项目时才出现。
下面是我到目前为止所拥有的伪代码(在此处粘贴真实代码将花费太多时间来修剪所有只会增加混乱的位):
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;
}
问题是当新闻项目页面加载时(由于分页控件的回发),查询字符串的 [year] 参数仍将被填充,因此将重新执行 GetNewsItems。此外 - 即使主页 URL(即没有查询字符串)被导航到 - 实际上仍然有新闻项目的缓存版本,因此它不会费心尝试检索它们 - 但它们可能在特定年份存在因此与“所有年份”的搜索无关。
我是否添加一个新的缓存条目来标记最近完成的搜索?我必须在这里做哪些考虑来缓存超时?如果需要(最好不要),我可以添加一个新的查询字符串 - 这会解决问题吗?