面向服務架構~全局配置文件也面向服務了~再續(引入Cache機制)


在寫完面向服務架構~全局配置文件也面向服務了面向服務架構~全局配置文件也面向服務了~續(對性能的優化)之后,覺得程序還是有可以優化的地方,在我上一篇文章中也提到了cache,所以今天這一篇主要把cache加入到項目中來,以便最大程度上提高程序的性能。

 1      /// <summary>
 2         /// 從文件中反序列化到實體
 3         /// </summary>
 4         /// <param name="fileName"></param>
 5         /// <param name="type"></param>
 6         private IConfiger LoadConfigFile(string fileName, Type type)
 7         {
 8             this.configType = type;
 9             fileChangeTime[fileName] = File.GetLastWriteTime(fileName);
10             return ConfigSerialize.DeserializeInfo(fileName, this.configType);
11         }
12         /// <summary>
13         /// 加載配置文
14         /// </summary>
15         /// <param name="fileName">文件名</param>
16         /// <param name="type">ʵ實體類型</param>
17         /// <returns></returns>
18         internal IConfiger LoadConfig(string fileName, Type type)
19         {
20             return LoadConfig(fileName, type, true);
21         }
22 
23         /// <summary>
24         /// 加載配置文件
25         /// </summary>
26         /// <param name="fileName">文件名</param>
27         /// <param name="type">實體類型</param>
28         /// <param name="isCache">是否要從緩存讀取</param>
29         /// <returns></returns>
30         internal IConfiger LoadConfig(string fileName, Type type, bool isCache)
31         {
32             if (!isCache)
33                 return LoadConfigFile(fileName, type);
34             lock (lockHelper)
35             {
36                 if (DataCache.GetCache(fileName) == null)
37                     DataCache.SetCache(fileName, LoadConfigFile(fileName, type));
38                 DateTime newfileChangeTime = File.GetLastWriteTime(fileName);
39                 if (!newfileChangeTime.Equals(fileChangeTime[fileName]))
40                 {
41                     DataCache.SetCache(fileName, LoadConfigFile(fileName, type));
42                     return LoadConfigFile(fileName, type);
43                 }
44                 else
45                 {
46                     return DataCache.GetCache(fileName) as IConfiger;
47                 }
48             }
49         }

實事上,使用cache使用的流程是:如果cache里沒有文件的緩存,就向從文件緩存到cache,再判斷是否文件被修改過,如果沒有直接返回cache中的實體配置信息,如果文件已經被修改,就從文件中取回,並同時存入緩存。

以下是.net cache的操作功能類代碼:

 1 namespace ConfigCache
 2 {
 3     public class DataCache
 4     {
 5         /// <summary>
 6         /// 得到cache鍵所對應的值
 7         /// </summary>
 8         /// <param name="CacheKey"></param>
 9         /// <returns></returns>
10         public static object GetCache(string CacheKey)
11         {
12             System.Web.Caching.Cache objCache = HttpRuntime.Cache;
13             return objCache[CacheKey];
14         }
15         /// <summary>
16         /// 將指定值設置到cache鍵上
17         /// </summary>
18         /// <param name="CacheKey"></param>
19         /// <param name="objObject"></param>
20         public static void SetCache(string CacheKey, object objObject)
21         {
22             System.Web.Caching.Cache objCache = HttpRuntime.Cache;
23             objCache.Insert(CacheKey, objObject);
24         }
25         /// <summary>
26         ///  將指定值設置到cache鍵上
27         /// </summary>
28         /// <param name="CacheKey"></param>
29         /// <param name="objObject"></param>
30         /// <param name="absoluteExpiration">絕對過期時間</param>
31         /// <param name="slidingExpiration">相對過期時間</param>
32         public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
33         {
34             System.Web.Caching.Cache objCache = HttpRuntime.Cache;
35             objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);
36         }
37 
38         /// <summary>
39         /// 移除指定cache鍵
40         /// </summary>
41         /// <param name="CacheKey"></param>
42         public static void RemoveCache(string CacheKey)
43         {
44             System.Web.Caching.Cache objCache = HttpRuntime.Cache;
45             objCache.Remove(CacheKey);
46 
47         }
48 
49     }
  }

這下子,應該有的都有了,業務分別了,性能也上去了,咱們的服務型配置文件的實現也就講完了,呵呵,各位晚安了!

 

相關文章:

面向服務架構~全局配置文件也面向服務了

面向服務架構~全局配置文件也面向服務了~續(對性能的優化)

面向服務架構~全局配置文件也面向服務了~再續(引入Cache機制)


免責聲明!

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



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