面向服务架构~全局配置文件也面向服务了~再续(引入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 }
}
这下子,应该有的都有了,业务分别了,性能也上去了,咱们的服务型配置文件的实现也就讲完了,呵呵,各位晚安了!
相关文章:
分类:
其它 / 面向服务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2011-06-14 通过修改密码功能,来学习MVC中AJAX的秒用