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配置的基路径设置为同一个目录,那我们就只要打开一个目录就可以修改到三个站点的参数了。

  • 相关阅读:
    SQL Server, Timeout expired.all pooled connections were in use and max pool size was reached
    javascript 事件调用顺序
    Best Practices for Speeding Up Your Web Site
    C语言程序设计 使用VC6绿色版
    破解SQL Prompt 3.9的几步操作
    Master page Path (MasterPage 路径)
    几个小型数据库的比较
    CSS+DIV 完美实现垂直居中的方法
    由Response.Redirect引发的"Thread was being aborted. "异常的处理方法
    Adsutil.vbs 在脚本攻击中的妙用
  • 原文地址:https://www.cnblogs.com/kingthy/p/2140410.html
Copyright © 2011-2022 走看看