使用分页和缓存(或不是)查询带有用户记录的大型(~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进行绝对缓存过期和缓存依赖)
对于搜索表格的不太复杂或更有效的方法的任何建议?
答案 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
}