我的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);
}
}
我使用singleton为它赋予价值:
School schoolSettings = (School)CacheProviderFactory.Cache.Get("SchoolSettings");
if (schoolSettings == null)
{
CacheProviderFactory.Cache.Set("SchoolSettings", someObject);
}
因此,在第一次使用时它不起作用并且给我一个错误cache[name]
为空。
我做错了什么?
任何帮助都将不胜感激。
答案 0 :(得分:2)
在任何时候你都没有给cache
一个值...并注意常规网络缓存可能不是你最好的选择,如果你想要它分开;也许
MemoryCache cache = new MemoryCache();
答案 1 :(得分:1)
使用HttpRuntime.Cache怎么样,这个例子会缓存一小时?
HttpRuntime.Cache.Add("SchoolSettings", someObject, null, DateTime.Now.AddHours(1),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Normal, null);
答案 2 :(得分: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);
}
}
答案 3 :(得分:0)
更改检查值的代码,如下所示:
School schoolSettings = CacheProviderFactory.Cache.Get(“SchoolSettings”)as(School);
请注意,我使用“as”而不是强制转换对象。如果值为null,则Cast会爆炸,而“as”只会为您提供一个您想要的空值。