C# 如何在asp.net mvc3中使用缓存?
我的asp.net mvc3应用程序中的缓存有问题 我的代码C# 如何在asp.net mvc3中使用缓存?,c#,asp.net-mvc-3,caching,C#,Asp.net Mvc 3,Caching,我的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)
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]
为空
我做错了什么
任何帮助都将不胜感激。使用HttpRuntime.Cache怎么样,这个示例将缓存一小时
HttpRuntime.Cache.Add("SchoolSettings", someObject, null, DateTime.Now.AddHours(1),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Normal, null);
使用HttpRuntime.Cache怎么样,这个示例将缓存一个小时
HttpRuntime.Cache.Add("SchoolSettings", someObject, null, DateTime.Now.AddHours(1),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Normal, null);
您在任何时候都没有给
缓存一个值。。。请注意,如果您希望将常规web缓存分开,那么它可能不是您的最佳选择;或许
MemoryCache cache = new MemoryCache();
您在任何时候都没有给缓存一个值。。。请注意,如果您希望将常规web缓存分开,那么它可能不是您的最佳选择;或许
MemoryCache cache = new MemoryCache();
更改检查值的代码,如下所示:
学校设置=CacheProviderFactory.Cache.Get(“学校设置”)为(学校)
请注意,我使用的是“as”,而不是投射对象。如果值为null,Cast将爆炸,而“as”只会给您一个null值,这是您所期望的 更改检查值的代码,如下所示:
学校设置=CacheProviderFactory.Cache.Get(“学校设置”)为(学校)
请注意,我使用的是“as”,而不是投射对象。如果值为null,Cast将爆炸,而“as”只会给您一个null值,这是您所期望的 请尝试以下代码。它对我的项目很有效
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);
}
}
请尝试以下代码。它对我的项目很有效
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);
}
}
您是否检查了MVC3的输出缓存?顺便说一句,Siema!维塔姆:)我需要这样使用缓存。你打算在某个时候给缓存赋值吗因为您没有。另外,您声称cache
是一个单例,并且存在一个CacheProviderFactory.cache
——这些东西都没有显示在代码中。你让我们猜测你移除了什么;这不会导致一个好的答案…稍微偏离主题,但您可能想看看如何使用依赖项注入来提供缓存实例。这样,如果需要,您可以将其更改为另一个缓存提供程序,并且还可以更轻松地进行单元测试。您是否检查了MVC3的输出缓存?顺便说一句,Siema!维塔姆:)我需要这样使用缓存。你打算在某个时候给缓存赋值吗因为您没有。另外,您声称cache
是一个单例,并且存在一个CacheProviderFactory.cache
——这些东西都没有显示在代码中。你让我们猜测你移除了什么;这不会导致一个好的答案…稍微偏离主题,但您可能想看看如何使用依赖项注入来提供缓存实例。这样,如果需要,您可以将其更改为另一个缓存提供程序,也可以更轻松地进行单元测试。我需要使用System.Web.caching
@MateuszRogulski为什么?这是一个私有的实现细节;坦白地说,它不应该是如何实现的。好吧,我已经用你的方法改变了它。谢谢:)我需要使用System.Web.Caching
@MateuszRogulski为什么?这是一个私有的实现细节;坦白地说,它不应该是如何实现的。好吧,我已经用你的方法改变了它。谢谢:)就像Marc Grassed提到的,你确定在调用Get方法时缓存不为null吗?就像Marc Grassed提到的,你确定在调用Get方法时缓存不为null吗?我也有同样的问题-null引用问题。但是我把它改成了HttpRuntime.Cache
我也遇到了同样的问题-空引用的问题。但我已将其更改为HttpRuntime.Cache