[英]how use caching in 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]
為null。
我做錯了什么?
任何幫助,將不勝感激。
您絕對不會給cache
一個值...並且請注意,如果您希望單獨使用常規網絡緩存,那不是最好的選擇。 也許
MemoryCache cache = new MemoryCache();
使用HttpRuntime.Cache怎么樣,這個示例將緩存一個小時?
HttpRuntime.Cache.Add("SchoolSettings", someObject, null, DateTime.Now.AddHours(1),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Normal, 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);
}
}
更改代碼以檢查值,如下所示:
學校schoolSettings = CacheProviderFactory.Cache.Get(“ SchoolSettings”)as(School);
請注意,我使用的是“ as”而不是強制轉換對象。 如果該值為null,則強制轉換將失敗,而“ as”將僅提供您期望的null值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.