zoukankan      html  css  js  c++  java
  • 我的KT库之缓存与配置

    了解或者认识KT:

    http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html

    在项目中如何使用KT?

    KT是一个库,所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。

    本节将介绍大家认识KT库里的缓存与配置。它们都存放在“KT.Core“下,当你已在你的项目里引用了KT库后,则写下以下代码就可以使用到KT里的缓存与配置对象了。

    using KT.Core;

    缓存

    KT的缓存只是简单的对.NET的缓存Cache进行了一个简单的包装,以便更方便的使用。

    1、增加一个缓存项

    //增加一个长时效的缓存项
    Cache.Add("key1", DateTime.Now);
    //增加一个具有绝对过滤时间的缓存项
    Cache.Add("key2", DateTime.Now, DateTime.Today.AddDays(1));
    //增加一个与文件关联的缓存项,如果文件有更改则缓存失效
    Cache.Add("key3", DateTime.Now, "c:\cache.txt");

    2、删除缓存项

    //删除对应键值的缓存项
    Cache.Remove("key1");
    //清空所有缓存
    Cache.Clear();

    3、获取某个缓存项

    //获取对应键值的缓存项
    object value = Cache.Get("key1");
    //获取对应键值的缓存项,如果缓存没有数据,则调用委托获取数据并存入缓存后返回
    DateTime time = Cache.GetOrAdd<DateTime>("key2", () =>
    {
        return DateTime.Now;
    });

    配置

    平时在项目开发中,参数配置都习惯在项目配置文件(app.config或web.config)的AppSettings节点中配置,比如以下示例:

      <appSettings>
        <add key="api_key" value="key-2011" />
        <add key="api_secret" value="iu5r324323423422" />
      </appSettings>
    

    程序代码里要使用参数时,直接调用即可,如下代码:

    string api_key = ConfigurationManager.AppSettings["api_key"];
    string api_secret = ConfigurationManager.AppSettings["api_secret"];

    如果我们的参数非常的多,这将会导致我们的项目配置文件非常的大。并且如果在web项目中,我们的配置参数在运行过程中需要更改,则将会导致我们的web站点应用程序的重启!对于正常运行的项目来说,程序的重启是希望不要发生的,因为这将会导致session的丢失等相关问题。虽然我们可以在appSettings节点里使用file属性采用外部文件来配置避免这问题,但在某些场合下,file属性却是无能为力了。比如需要分多个配置文件存储不同的数据,file属性是无法做到的。

    KT的配置

    1、KT的配置文件

    KT的配置文件,默认存储于程序根目录下的config目录,当然,你也可以自定义配置的存储路径,比如在app.config或web.config里的AppSettings节点里配置以下设置。

      <appSettings>
        <!--方法1:设置绝对路径-->
        <add key="KT.SETTINGS.BASEPATH" value="c:\data\config\" />
        <!--方法2:设置相对路径-->
        <add key="KT.SETTINGS.BASEPATH" value="~/data/config/" />
      </appSettings>
    

    如果未设置则默认是程序的根目录(Web应用程序则是站点根目录;Windows应用程序则是可执行文件所在的目录)下的config目录

    KT的配置文件采用的是标准xml文件,如下示例:

    <?xml version="1.0" encoding="utf-8" ?>
    <settings>
      <add key="k1" value="1" />
    <k2>2</k2> <k.name>aliey</k.name> <k.age>20</k.age> </settings>

    上面配置中,共定义了4个参数。其中k1参数的定义同.net里的appSettings一样,通过<add>节点元素定义;其它的参数都是采用节点形式定义。

    KT的配置文件有两个特殊的节点<add><include>节点。

    1、<add>节点:如果定义此节点,并且带有“key”属性,则表示增加一个参数,参数值由“value”属性定义。如果定义此节点,但不带有任何属性,则看作普通的参数"add”对待。如下面示例:

    <?xml version="1.0" encoding="utf-8" ?>
    <settings>
      <add key="k1" value="1" />
      <add>action/add</add>
    </settings>
    

    共定义了“k1”与“add”两个参数。

    2、<include>节点:如果定义此节点,并且带有“file”属性,则表示是引用相关的配置文件。否则如果不带有任何属性,则看作普通的参数“include”对待。如下面示例:

    <?xml version="1.0" encoding="utf-8" ?>
    <settings>
      <add key="k1" value="1" />
      <add>action/add</add>
      <include file="mysettings.xml" />
      <include file="c:\config\mysettings2.xml" />
      <include>action/include</include>
    </settings>
    
    

    共导入了“mysettings.xml”与“c:\config\mysettings2.xml”两个配置文件里的配置参数,并且还定义了一个“include”参数,其中file属性的值可以是相对路径或绝对路径,如果是相对路径则是“相对于当前配置文件所在的路径”。

    所有参数的节点都可以重复定义,但参数最终的值将由最后一个定义节点决定(注:“<include file=””>”节点是例外),即最后定义的将覆盖先前定义的值。如下示例:

    <?xml version="1.0" encoding="utf-8" ?>
    <settings>
      <add key="k1" value="1" />
      <k1>2</k1>
    </settings>
    
    

    最终,“k1"的值是“2”。

    2、配置参数的获取

    参数的获取是通过KT.Core.Settings实例类获取,此类共有几个静态方法和属性。

    A、BasePath : 返回存储配置文件所在的基路径。此值可以通过上面所说的方法,在appSettings里修改。默认是程序根目录下的config目录.

    B、Default : 返回默认存储配置文件的所有配置参数值。此默认配置参数存储于基路径下的"settings.config"文件。

    C、From : 从配置文件获取配置参数。配置文件可以是相对路径或绝对路径,如果是相对路径则相对于BasePath。

    D、Get<T>: 从配置文件获取配置参数并映射为某个实体类。配置文件可以是相对路径或绝对路径,如果是相对路径则相对于BasePath。

    假如以下配置存储在基路径下的settings.config文件

    <?xml version="1.0" encoding="utf-8" ?>
    <settings>
      <add key="k1" value="1" />
    <k2>2</k2> <k.name>aliey</k.name> <k.age>20</k.age> </settings>

    那我们可以这样获取参数“k1”、“k2”、“k.name”的值

    Console.WriteLine(Settings.Default["k1"]);
    Console.WriteLine(Settings.Default["k2"]);
    Console.WriteLine(Settings.Default["k.name"]);
    Console.WriteLine(Settings.Default["k.age"]);

    如果我们配置文件不是默认的“settings.config”文件,那我们可以这样获取配置

    var setttings = Settings.From("mysettings.xml");
    Console.WriteLine(setttings["k1"]);
    Console.WriteLine(setttings["k2"]);
    Console.WriteLine(setttings["k.name"]);
    Console.WriteLine(setttings["k.age"]);

    如果我们的配置文件结构可以映射为某个类,比如上面的配置文件可以映射为以下类结构

    public class KItem
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    public class AppSettings
    {
        public int K1 { get; set; }
        public int K2 { get; set; }
        public KItem K { get; set; } 
    }

    那我们还可以直接通过Get<T>方法直接获取配置实体类,如下面的示例:

    var app = Settings.Get<AppSettings>("mysettings.xml");
     Console.WriteLine("K1={0}", app.K1);
     Console.WriteLine("K2={0}", app.K2);
     Console.WriteLine("K.Name={0}", app.K.Name);
     Console.WriteLine("K.Age={0}", app.K.Age);

    由于AppSettings里的属性“K”是一个“KItem”类型,所以KT将会自动将“<k.name>”和“<k.age>”这两个节点映射为“KItem”类型的值.

    注:KT的配置都已启用缓存功能,所以不需要担心它的效率问题。

    我们可以用KT的配置做什么?

    A、各应用程序之间的配置可以互相独立存放。 比如在WEB环境下,同一个站点下有多个不同的WEB应用程序,如论坛、博客、接口服务等等,那我们可以将它们的配置分别以不同的文件名存放于“基路径”下,如“forum.config”, “blog.config”,"service.config“,再调用From或Get<T>方法读取不同的文件名即可。

    B、各应用程序之间的配置可以共享使用。比如上面例子所说的,如果“论坛”程序要调用“博客”里的参数,则我们可以在论坛的配置参数里加入“<include file=“blog.config”>”节点引入“博客”的配置参数。

    C、各应用程序的配置可以统一存放。比如在WEB环境下,我们有A、B、C三个站点,这三个站点都需要用到同一个数据库,于是我们分别在这三个站点下写了一个同样用户名与密码的“ConnectionString“配置参数,当某一天,我们修改了数据库的用户密码,那我们就要分别打开这三个站点的目录去修改“ConnectionString”配置参数。而如果我们将A、B、C三个站点的KT配置的基路径设置为同一个目录,那我们就只要打开一个目录就可以修改到三个站点的参数了。

  • 相关阅读:
    VSTO不能创建OFFICE 文档项目的原因
    vs2016 创建 vsto excel 文件项目的一个问题
    一个开发原则:永远不要返回NULL
    客户为什么习惯变更需求
    从实际项目中的一个改进细节谈程序的易用性优化
    第三方系统打开EAFC的实现
    功能间(两个form)数据交互的编程方法
    关于行军模式大批量数据的审批的实现
    程序的升级发布管理
    转:从如何判断浮点数是否等于0说起——浮点数的机器级表示 献给依然 if ( double i ==0.00)的菜鸟们
  • 原文地址:https://www.cnblogs.com/kingthy/p/2140410.html
Copyright © 2011-2022 走看看