如果每次调用都需要计算很多东西并将其返回给客户端,那么缓存可查询结果的最佳方法是什么。
代码示例
[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调用的最佳方法是什么?
答案 0 :(得分:0)
正如OP在他的评论中解释的那样,要缓存的对象是调用GetCarList();
返回的列表,结果总是相同的。
您只需将其存储在缓存中,请参阅文档:Cache Class。
如果需要,请检查它是否在缓存中。如果没有,请在使用之前创建它并存储在缓存中(在任何您想要使用它的地方)。由于Cache
是线程安全的,因此从不同的请求中访问它不会产生可疑问题。