面向服务架构~全局配置文件也面向服务了~再续(引入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机制),如需转载请自行联系原博主。

目录
相关文章
|
10月前
|
运维 负载均衡 微服务
|
12月前
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
1200 0
|
运维 监控 负载均衡
探索微服务架构下的服务治理:动态服务管理平台深度解析
探索微服务架构下的服务治理:动态服务管理平台深度解析
|
12月前
|
文字识别 运维 监控
架构解密|一步步打造高可用的 JOCR OCR 识别服务
本文深入解析了JOCR OCR识别服务的高可用架构设计,涵盖从用户上传、智能调度、核心识别到容错监控的完整链路,助力打造高性能、低成本的工业级OCR服务。
468 0
架构解密|一步步打造高可用的 JOCR OCR 识别服务
|
消息中间件 人工智能 监控
文生图架构设计原来如此简单之分布式服务
想象一下,当成千上万的用户同时要求AI画图,如何公平高效地处理这些请求?文生图/图生图大模型的架构设计看似复杂,实则遵循简单而有效的原则:合理排队、分工明确、防患未然。
588 14
文生图架构设计原来如此简单之分布式服务
|
存储 编解码 搜索推荐
文生图架构设计原来如此简单之社区与共享机制
工作流共享是文生图应用社区建设的核心功能,它使用户能够分享创作经验和技巧,形成知识共享生态。工作流序列化与存储设计需要解决复杂工作流的高效表示问题。
318 10
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
332 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
794 12
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。