• 全局配置文件也面向服务了~再续(引入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机制)

     
    分类: C#面向服务
  • 相关阅读:
    Microsoft Dynamics CRM 常用JS语法(已转成vs2017语法提示)
    IIS7如何实现访问HTTP跳转到HTTPS访问
    C#调用PB写的com组件dll
    C# winform程序免安装.net framework在XP/win7/win10环境运行!
    文件上传漏洞
    OWASP TOP 10
    sql
    ASCII码查看
    sql注入--mysql
    sql注入--access
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2550226.html
Copyright © 2020-2023  润新知