【问题标题】:How to add an object to a Cache and Access the data from cache in MVC4?如何将对象添加到缓存并从 MVC4 中的缓存中访问数据?
【发布时间】:2012-10-06 04:19:16
【问题描述】:

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

         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"
                            }
                        ]
                    }
                ]
            }
        ]

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

【问题讨论】:

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


    【解决方案1】:

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

    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 中的一种。如果您只想缓存视图的一部分,则还有其他类型的缓存,例如甜甜圈缓存和甜甜圈孔缓存。在甜甜圈洞缓存中,您可以将上述缓存的操作作为操作包含到另一个视图中。

    【讨论】:

    • ....这个语句中的 ProductDetail 是什么 ProductDetails object = (ProductDetails) HttpContext.Current.Application["productdetial"]
    • 它是存储在应用程序缓存中的对象的类型,我假设类型为“ProductDetails”。你甚至可以存储一个 json 字符串。然后代替“ProductDetails”使用字符串来存储和检索对象。应用缓存是一种键值哈希表。键可以是一个简单的字符串。该值可以是任何类型的对象。
    【解决方案2】:

    你可以使用httpcontext缓存:

    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");
    }
    

    【讨论】:

    • 如果您只需要在控制器操作中缓存某些服务调用,并且需要取消缓存其余部分,那就太好了。
    猜你喜欢
    • 2017-06-08
    • 1970-01-01
    • 2020-12-29
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2020-12-31
    相关资源
    最近更新 更多