0

我的 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]是空的。

我做错了什么?

任何帮助,将不胜感激。

4

4 回答 4

2

您从来没有给出cache任何价值……请注意,如果您希望将其分开,常规的网络缓存可能不是您的最佳选择;也许

MemoryCache cache = new MemoryCache(); 
于 2012-08-07T13:01:27.303 回答
1

使用 HttpRuntime.Cache 怎么样,这个例子会缓存一个小时?

HttpRuntime.Cache.Add("SchoolSettings", someObject, null, DateTime.Now.AddHours(1),
                       System.Web.Caching.Cache.NoSlidingExpiration,
                       System.Web.Caching.CacheItemPriority.Normal, null);
于 2012-08-07T12:56:25.463 回答
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);
            }
        }
于 2012-08-07T15:04:48.480 回答
0

更改检查值的代码,如下所示:

SchoolschoolSettings = CacheProviderFactory.Cache.Get("SchoolSettings") as (School);

请注意,我使用的是“as”而不是强制转换对象。如果值为 null,Cast 会爆炸,而“as”只会给你一个你期望的 null 值。

于 2012-08-07T13:01:35.370 回答