博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的KT库之-----缓存与配置
阅读量:5897 次
发布时间:2019-06-19

本文共 4407 字,大约阅读时间需要 14 分钟。

了解或者认识KT:

 

在项目中如何使用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
("key2", () =>{ return DateTime.Now;});

 

 

配置

平时在项目开发中,参数配置都习惯在项目配置文件(app.config或web.config)的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节点里配置以下设置。

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

 

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

2
aliey
20

 

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

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

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

action/add

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

 

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

action/add
action/include

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

 

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

2

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

 

2、配置参数的获取

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

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

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

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

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

 

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

2
aliey
20

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

本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2011/08/16/2140410.html
,如需转载请自行联系原作者
你可能感兴趣的文章
MVC webapi,Action的分别拦截器
查看>>
Unity载入和内存管理机制
查看>>
NSOperationQueue小结
查看>>
SVG 使用marker画箭头(一)
查看>>
CSS 如何让li横向居中显示
查看>>
JavaScript语句
查看>>
米其林「暖男」服务,做您行车安全的强有力后盾
查看>>
第4阶段——制作根文件系统 (4)
查看>>
RHEL7 添加网卡并设置多个IP地址
查看>>
Android tablayout增加选择tab 的事件.
查看>>
Linux下读取RFID卡号(C串口编程)
查看>>
Java线程:Callable和Future
查看>>
基于TILE-GX实现快速数据包处理框架-netlib实现分析【转】
查看>>
SpringCloud的Config:ConfigServer注册到EurekaServer中,变成一个Eureka服务
查看>>
use ECharts with Angular 2 and TypeScript
查看>>
Lua5.3 注册表 _G _ENV
查看>>
Azure 中部署WordPress的方法
查看>>
System.Drawing.Text.TextRenderingHint 的几种效果
查看>>
Centos 7 修改时区
查看>>
再理解tcp backlog
查看>>