2012-08-07 69 views
0

我在我的asp.net mvc3应用程序中有缓存问题。如何在asp.net mvc3中使用缓存?

我的代码

using System.Web.Caching; 
... 
class RegularCacheProvider : ICacheProvider 
{ 
    Cache cache ; 

    public object Get(string name) 
    { 
     return cache[name]; 
    } 

    public void Set(string name, object value) 
    { 
     cache.Insert(name, value); 
    } 

    public void Unset(string name) 
    { 
     cache.Remove(name); 
    } 
} 

我使用单为给定值,因为它:

School schoolSettings = (School)CacheProviderFactory.Cache.Get("SchoolSettings"); 
      if (schoolSettings == null) 
      { 
       CacheProviderFactory.Cache.Set("SchoolSettings", someObject); 
      } 

所以在第一次使用它不工作,并给我一个错误cache[name]为空。

我在做什么错了?

任何帮助,将不胜感激。

+0

您是否检查了MVC3的输出缓存? BTW Siema! – 2012-08-07 12:53:15

+0

Witam :)我需要使用Cache这种方式。 – 2012-08-07 12:54:27

+0

您是否计划在某个时刻为'cache'指定一个值? '因为你没有。 – 2012-08-07 12:58:08

回答

1

如何使用HttpRuntime.Cache,这个例子会缓存一个小时?

HttpRuntime.Cache.Add("SchoolSettings", someObject, null, DateTime.Now.AddHours(1), 
         System.Web.Caching.Cache.NoSlidingExpiration, 
         System.Web.Caching.CacheItemPriority.Normal, null); 
+0

我需要使用'System.Web.Caching' – 2012-08-07 12:57:47

+1

@MateuszRogulski为什么?这是一个私人实施细节;坦率地说,它不应该*重要*如何实施 – 2012-08-07 13:02:09

+0

好吧,我已经改变了你的方法。谢谢:) – 2012-08-07 18:58:03

2

在任何时候你给cache价值......并注意定期网络缓存可能不是你最好的选择,如果你想要独立;也许

MemoryCache cache = new MemoryCache(); 
+0

它仍然不起作用。 – 2012-08-07 13:05:31

+0

@MateuszRogulski定义“不工作” – 2012-08-07 14:57:06

+0

我有同样的问题 - 与空引用的问题。但我已经改变它'HttpRuntime.Cache' – 2012-08-07 19:00:55

0

变化,你检查的数值如下代码:

学校schoolSettings = CacheProviderFactory.Cache.Get( “SchoolSettings”)为(学校);

请注意,我使用“as”而不是投射物体。如果值为空,演员将爆炸,而“as”只会给你一个你期望的空值。

+0

我有一个Get方法的错误,所以它也给出了异常。 – 2012-08-07 13:03:56

+0

像Marc Gravel提到的那样,Get方法被调用时,你确定缓存是否为空? – 2012-08-07 13:06:32

1

请尝试下面的代码。它适用于我的项目

using System.Runtime.Caching; 

    public class RegularCacheProvider : ICacheProvider 
     { 
      private ObjectCache Cache { get { return MemoryCache.Default; } } 

      object ICacheProvider.Get(string key) 
      { 
       return Cache[key]; 
      } 

      void ICacheProvider.Set(string key, object data, int cacheTime = 30) 
      { 
       var policy = new CacheItemPolicy {AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(cacheTime)}; 
       Cache.Add(new CacheItem(key, data), policy); 
      } 

      void ICacheProvider.Unset(string key) 
      { 
       Cache.Remove(key); 
      } 
     }