不同數據緩存,依賴同一個文件

由於志願採集類型、各地市報名點、以及考生層次不同,所以現場報名的確認點也是不同的。如何將這些確認點信息進行緩存以便提高網站瀏覽的速度呢?可以利用EnterpriseLibrary的文件依賴緩存技術和單件模式。代碼如下:

        private static readonly Object YYQRRQLockObject = new Object(); //鎖

        /// <summary>
        /// 獲取報名點信息
        /// </summary>
        /// <param name="strSXSDM">地市代碼</param>
        /// <param name="strCCDM">層次代碼</param>
        /// <returns></returns>
        public static ObjectBMDInfo GetBMDInfo(string strSXSDM, string strCCDM)
        {
            ICacheManager primitivesCache = CacheFactory.GetCacheManager();
           
            ObjectBMDInfo dstBMDInfo;

            //命名緩存文件名:志願採集類型,地市代碼,層次代碼
            string CacheName = string.Format("QRDInfo_{0}_{1}_{2}", CommonSet.Type, strSXSDM, strCCDM); 

            // Cache中存在數據嗎?
            object obj = primitivesCache.GetData(CacheName);
            if (obj == null)
            {
                // 無數據,加鎖
                lock (YYQRRQLockObject)
                {
                    // 再次判斷, 如果沒有數據,則從數據庫中獲取數據
                    obj = primitivesCache.GetData(CacheName);
                    if (obj == null)
                    {
                        // 獲取數據集
                        DA_Place_Time acc = new DA_Place_Time();
                        dstBMDInfo = acc.GetBMDInfo(strSXSDM, strCCDM);

                        // 加入緩存(文件依賴和時間依賴)
                        string fullFileName = CommonSet.CheckCacheFile(sr.BMDRelateFile);
                        primitivesCache.Add(CacheName, dstBMDInfo, CacheItemPriority.Normal, null, new ICacheItemExpiration[] { new FileDependency(fullFileName) }); //將所有的緩存都依賴一個文件,也就是說,只要依賴文件右邊,那麼所有的緩存都有重新創建
                        return dstBMDInfo;
                    }
                }
            }
           
            dstBMDInfo = (ObjectBMDInfo)obj;
            return dstBMDInfo;
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章