2012-04-30 112 views
3

我在我的MVC控制器中有一个动作,我想根据传递的参数作为关键字缓存它的返回结果,这样下一次该动作将被调用时它将首先如果找不到,它将查找数据存储。将数据存储在高速缓存中30分钟MVC

public ActionResult GetSearchResult(string zipcode, int pageSize, int currentPage) 
{ 
    Cache[zipcode + page + currentpage] = somedata // but it should be cleared after 30 min 
} 

我该怎么做?我可以像上面那样将数据存储在缓存对象中,但是我想确保缓存的对象在30分钟后被清除。我看不到如何在全局或每个缓存对象的基础上配置生存期。

回答

2

我强烈建议使用你的行动的输出缓存过滤器,而不是做手工自己

 [OutputCache(Duration=1800, VaryByParam="*")] 
    public ActionResult GetSearchResult(string zipcode, int pageSize, int currentPage) 
    { 
    //  Cache[zipcode + page + currentpage] = somedata // but it should be cleared after 30 min 
    } 
+0

是的,我想过这个问题,但将它存储的数据按照不断变化的参数值的基础?因为邮编会不断变化? – BreakHead

+1

你的意思是它会缓存不同的输入邮政编码的结果?是的,这就是['VaryByParam'](http://msdn.microsoft.com/zh-cn/library/system.web.mvc.outputcacheattribute.varybyparam.aspx)属性指定的 – Rup

+0

@Rup击中了头部。您可以使用VaryByParam使用特定的全部参数或无参数进行缓存。在我的例子中,我说的是应该使用zipcode,pagesize和currentPage(即所有参数)来确定要缓存什么(并从缓存中提取) –