WisDom.Net 框架設計(三) 數據緩存


WisDom.Net  --數據緩存

1.幾種緩存方式

      1.靜態全局變量

         C#靜態變量使用 static 修飾符進行聲明,在類被實例化時創建,通過類進行訪問不帶有 static 修飾符聲明的變量稱做非靜態變量,在對象被實例化時創建,通過對象進行訪問一個類的所有實例的同一C#靜態變量都是同一個值,同一個類的不同實例的同一非靜態變量可以是不同的值。靜態函數的實現里不能使用非靜態成員,如非靜態變量、非靜態函數等。

      2.System.Runtime.Caching 中緩存類庫

        這個是.Net 4.0新出的一個命名空間,提供緩存對所有 .NET framework 應用程序 (而不僅僅是 ASP.NET) 進行訪問, 高速緩存是可擴展的。 您   可以創建自定義高速緩存提供程序。例如,您可以不使用默認的內存高速緩存引擎,而是創建自定義提供程序,在數據庫、自定義對象或文件系統中存儲高速緩存數據。具體參見MSDN.這里不展開講

      3.頁面緩存,(顯然這里不合適)

2.WisDom.net.DataCahce 設計構想

     

 

1.我們設計數據緩存基類如下。這里使用模板模式(附上基類的代碼希望大家指正)

 

 public abstract class DataCacheCoomon<T>
    {
        protected  List<T> DataCacheDict = null;
        private static object _obj = new object();

        public  DataCacheCoomon()
        {
            if (DataCacheDict==null||DataCacheDict.Count == 0)
            {
                lock (_obj)
                {
                    if (DataCacheDict == null || DataCacheDict.Count == 0)
                    {
                        DataCacheDict = new List<T>();
                        GetDataFromDb();
                    }
                }
            }
        }

        protected abstract void GetDataFromDb();


        /// <summary>
        /// 增加數據緩存
        /// </summary>
        /// <param name="dataItem"></param>
        public void AddDataCache(List<T> dataItem)
        {
            foreach (T data in dataItem)
            {
                DataCacheDict.Add(data);
            }
        }

        /// <summary>
        /// 刪除數據緩存
        /// </summary>
        /// <param name="dataItem"></param>
        public void DelDataCache(List<T> dataItem)
        {
            foreach (T data in dataItem)
            {
                DataCacheDict.Remove(data);
            }
        }

        /// <summary>
        /// 獲取字典緩存
        /// </summary>
        /// <returns></returns>
        public List<T> GetDataCacheDict()
        {
            return DataCacheDict;
        }

        
    }

 

 

 2.在具體某個緩存項目時都需要繼承上面的基類

 3. 使用並行方式將數據加到MemoryCache  中 示例如下(一個簡單的例子給大家參考,)從緩存中獲取

   

     ObjectCache objectCache = MemoryCache.Default;//




            Parallel.Invoke(() =>
            {
                CacheItem Iten = new CacheItem("aaa", 1);
                objectCache.Add(Iten, new CacheItemPolicy());
            },
                  () =>
                  {
                      CacheItem Iten = new CacheItem("Bbb", 1);
                      objectCache.Add(Iten, new CacheItemPolicy());
                  });

 

 

 

 

    

 

   

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM