如何为分页

时间:2015-05-20 11:33:18

标签: caching asp.net-web-api odata asp.net-web-api2

如果每次调用都需要计算很多东西并将其返回给客户端,那么缓存可查询结果的最佳方法是什么。

代码示例

 [Queryable]
 public IQueryable<Car> Get()
 {
    try
    {
    var result=GetCarList();
    //GetCarList() calculation is  taking  around 1 min

    return result.AsQueryable();
    } 
 }

GetCarList()
{
var query = from car in db.CarDetail
            where car.color == "white"
            select car;

//10k records of white cars are selected with out considering makers 
//white is mandatory
foreach (var car in query)
{
  //Processing each record in every call
}
}

查询示例

第一页

localhost/api/Car?$filter=(make eq 'ford')&$orderby=carid desc&$top=10

第二页

localhost/api/Car?$filter=(make eq 'ford')&$orderby=carid desc&$top=10$skip=10

第三页

localhost/api/Car?$filter=(make eq 'ford')&$orderby=carid desc&$top=10$skip=20

每次呼叫每次呼叫持续1分钟,即使当前过滤器的计算相同。缓存这种api调用的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

正如OP在他的评论中解释的那样,要缓存的对象是调用GetCarList();返回的列表,结果总是相同的。

您只需将其存储在缓存中,请参阅文档:Cache Class

如果需要,请检查它是否在缓存中。如果没有,请在使用之前创建它并存储在缓存中(在任何您想要使用它的地方)。由于Cache是线程安全的,因此从不同的请求中访问它不会产生可疑问题。