【问题标题】:Store data in cache for 30 min MVC在缓存中存储数据 30 分钟 MVC
【发布时间】:2025-12-02 12:15:02
【问题描述】:

我的 MVC 控制器中有一个动作,我想根据传递的参数作为键来缓存它的返回结果,这样下次调用这个动作时,它会首先在缓存中查找,如果没有找到它会查看数据存储。

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

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    我强烈建议对您的操作使用 outputcache 过滤器,而不是自己手动操作

         [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
         }
    

    【讨论】:

    • 是的,我想过,但它会根据变化的参数值基础存储数据吗?因为邮政编码会不断变化?
    • 你的意思是它会为不同的输入邮政编码缓存不同的结果吗?是的,这就是 VaryByParam 属性指定的内容
    • @Rup 一针见血。您可以使用 VaryByParam 使用特定的、全部或不使用参数进行缓存。在我的示例中,我是说应该使用 zipcode、pagesize 和 currentPage(即所有参数)来确定要缓存的内容(并从缓存中提取)
    【解决方案2】:

    您可以使用Cache.Insert() 方法。

    Cache.Insert("key", myTimeSensitiveData, null, 
      DateTime.Now.AddMinutes(30), TimeSpan.Zero);
    

    更多信息请参见ASP.NET Caching: Techniques and Best Practices

    【讨论】: