使用分页和.NET缓存(或不是)有效地查询大型(~1M)记录SQL表

时间:2017-10-19 11:05:54

标签: c# asp.net sql-server caching

使用分页和缓存(或不是)查询带有用户记录的大型(~1M)SQL表的有效方法是什么?

此表由asp.net网站使用,其主要目的是允许根据几个参数(国家/地区,年份范围,性别等)对此表进行搜索,过滤和排序。

结果(用户ID列表)显示在某个网格中(每页25行,带分页)

users表每分钟有几次更新/插入,并且有很多表的读取请求(搜索和过滤)。

**我们可以允许显示的结果为10分钟。

目前我们使用以下方法:

根据过滤器参数和分页页面,将每个(第一个)搜索请求传递给SQL服务器,并将结果(用户ID)存储在.NET缓存中10分钟。

例如,国家/地区的搜索请求:

Spain| From:1980 | To:2020 | Gender: Male | Page:1 , We create two cache keys:

Main cache: Spain_1980_2020_Male (Based on filter parameters)

Secondary cache: Spain_1980_2020_Male_Page1 (based on filter parameters + page)

下一个请求具有相同的搜索参数&页面将直接从缓存返回,而不会访问SQL。

10分钟后,主缓存密钥和所有辅助页面密钥被清除(使用.NET进行绝对缓存过期和缓存依赖)

对于搜索表格的不太复杂或更有效的方法的任何建议?

1 个答案:

答案 0 :(得分:0)

我最后通过重写下面的代码来解析null异常(尽管这不是这个问题的主要目的,但是作为答案发布):

旧代码:

var cache = HttpContext.Current.Cache;
if (cache[cacheKey] != null)
{
   users = HttpContext.Current.Cache[cacheKey] as List<int>;
}
else
{
 // load from DB
}

新代码:

var users = cache[cacheKey] as List<int>;
if (user == null)
{
  //load from DB
}