簡體   English   中英

如何在asp.net mvc3中使用緩存?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM