我有从数据库返回的结果集,需要几秒钟才能运行。为了提高性能,我将缓存结果长达30分钟。对数据库的调用采用日期参数,即用户从日历中选择的接下来60天内的日期。
这是一个代码示例,它使用字符串列表来保持示例简单:
public List<String> GetConcertList(DateTime selectedDate)
{
String cacheKey;
cacheKey = "ConcertList" + selectedDate.Date.Ticks.ToString();
List<String> concertList = HttpContext.Current.Cache[cacheKey] as List<String>;
if (concertList == null)
{
// Normally this is the call to the database that passes the selected date
concertList.Add("Just a test for " + selectedDate.ToString());
HttpContext.Current.Cache.Insert(cacheKey, concertList, null, DateTime.Now.AddMinutes(30),
System.Web.Caching.Cache.NoSlidingExpiration);
}
return concertList;
}
有没有更好的方法然后使用密钥中的日期来缓存每一天的列表?
答案 0 :(得分:1)
我们在这里讨论的数据集有多大?如果它不是很大,您可能希望缓存整个列表,然后根据用户选择的日期提取子集。
更好的方法是保留一个主数据集,该数据集是所有用户请求的日期的聚合。基本上,您只需将任何新的,尚未请求的结果附加到缓存的数据集并从那里开始工作。