如何将对象添加到缓存并从MVC4中的缓存中访问数据?

时间:2012-10-16 05:56:21

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

大家好我有一个返回这样的数据的对象

         var productdetial=  {
                               "productId": "1",
                               "productname": "Casualshirts",
                               "productSkus": [
                                                   {
                                                     "Skuimage": "URL",
                                                     "SKU": [
                                                               {
                                                                  "ProducSKU": "Shoe1001",
                                                                  "Options": [
                                                                                {
                                                                                  "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Black"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            },
            {
                "ProducSKU": "Shoe1002",
                "Options": [
                    {
                        "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Red"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            },
            {
                "ProducSKU": "Shoe1003",
                "Options": [
                    {
                        "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Orange"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            }
        ]

现在我想要的是我想将这些数据保存在缓存中,并且我将这些数据绑定到我的视图,现在我想要的是当我从现在开始请求时我应该能够访问来自上面的对象是在缓存中...可以帮助我如何做到这一点如何将此对象添加到缓存并从那里访问数据

2 个答案:

答案 0 :(得分:3)

您可以将其放在应用程序缓存中,以便可以从任何位置访问它。

HttpContext.Current.Application["productdetial"] = productdetial;

然后你可以从任何地方访问它

ProductDetails object = (ProductDetails) HttpContext.Current.Application["productdetial"]

如果你想存储和检索这个字符串,那么这也是可能的。请注意,如果您需要特定于用户会话的缓存,请使用“会话”表而不是“应用程序”

可以在控制器操作上应用另一种类型的缓存OutputCache,如下所示。如果持续时间为300秒,则会向客户端提供缓存的输出。

[OutputCache(Duration=300, VaryByParam="none")]
 public ActionResult GetProductDetails()
 {
      //Fetch the data once and it will be cached for 300 seconds       
            return View(data);
 }

看起来你需要以上其中之一2.还有其他类型的缓存,如甜甜圈缓存和圆环洞缓存,如果你只想缓存视图的某些部分,它们是适用的。在圆环洞缓存中,您可以将上述缓存操作作为操作包含在另一个视图中。

答案 1 :(得分:3)

您可以使用httpcontext cache:

if(HttpContext.Cache.Get("productdetial") == null)
{
  HttpContext.Cache.Add("productdetial", productdetial, null, Cache.NoAbsoluteExpiration,
                                          new TimeSpan(0, 1, 0), CacheItemPriority.Normal, null);
}else
{
  cached = (ProductDetails) HttpContext.Cache.Get("productdetial");
}