面向服务架构~全局配置文件也面向服务了~再续(引入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机制)
本文转自博客园张占岭(仓储大叔)的博客,原文链接:面向服务架构~全局配置文件也面向服务了~再续(引入Cache机制),如需转载请自行联系原博主。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持
在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle、SQLServer、Mysql这些常规的数据库,也有可能访问SQLite、Access,或者一些我们可能不常用的PostgreSQL、IBM DB2、或者国产达梦数据库等等,这些数据库的共同特点是关系型数据库,基本上开发的模型都差不多,不过如果我们基于ADO.NET的基础上进行开发的话,那么各种数据库都有自己不同的数据库操作对象,微软企业库Enterprise Library是基于这些不同数据库的操作做的抽象模型,适合多数据库的支持项目。本文介绍基于微软企业库Enterprise Library 4.1的基础进行的多种数据库的处理。 1、企业库Enterprise Library版本的选择 在选择Enterprise Library版本的时候,我一直都是相对谨慎,因为我们开发的项目涉及很多不同的系统,有的需要XP的支持、有的需要Win7的支持或者Win10等等,需要考虑不同系统之家的兼容问题,由于微软企业库中的数据库访问模块相对比较稳定,因此也基本沿用使用稳定的版本,虽然目前Enterprise Library版本...
- 下一篇
Web API项目中使用Area对业务进行分类管理
在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加很快,难以管理,而且如果有不同业务模块有重复的控制器名的话,还需要尽量避免。引入Area的作用就是把控制器按照不同的业务模块进行区分,方便管理,而且控制器名称可以重名。 1、Web API项目引入Area进行分类 Area在项目中可以称之为区域,每个Area代表应用程序的不同功能模块,Area 使每个功能模块都有各自的文件夹,文件夹中有自己的Controller、View和Model,但对于管理也增加了一定的难度。如果是Web API项目,我们可以把不必要的目录移除即可,简化对目录的管理。 引入Area可以是我们不同的业务模块可以重名,而且各个业务模块管理起来也更加方便,在原先的Web API项目里面,它们的目录是这样的。 虽然我们把它们的目录归类,但是它们还是存放在一个命名空间下的。 namespace MyWebApi.Controllers 这样使用虽然也没有什么问题,但是还是存在一...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Hadoop3单机部署,实现最简伪集群