您的位置:首页 > 运维架构 > 网站架构

面向服务架构~全局配置文件也面向服务了~再续(引入Cache机制)

2012-06-14 23:14 417 查看
在写完面向服务架构~全局配置文件也面向服务了面向服务架构~全局配置文件也面向服务了~续(对性能的优化)之后,觉得程序还是有可以优化的地方,在我上一篇文章中也提到了cache,所以今天这一篇主要把cache加入到项目中来,以便最大程度上提高程序的性能。

1      /// <summary>
/// 从文件中反序列化到实体
/// </summary>
/// <param name="fileName"></param>
/// <param name="type"></param>
private IConfiger LoadConfigFile(string fileName, Type type)
{
this.configType = type;
fileChangeTime[fileName] = File.GetLastWriteTime(fileName);
return ConfigSerialize.DeserializeInfo(fileName, this.configType);
}
/// <summary>
/// 加载配置文
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="type">ʵ实体类型</param>
/// <returns></returns>
internal IConfiger LoadConfig(string fileName, Type type)
{
return LoadConfig(fileName, type, true);
}

/// <summary>
/// 加载配置文件
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="type">实体类型</param>
/// <param name="isCache">是否要从缓存读取</param>
/// <returns></returns>
internal IConfiger LoadConfig(string fileName, Type type, bool isCache)
{
if (!isCache)
return LoadConfigFile(fileName, type);
lock (lockHelper)
{
if (DataCache.GetCache(fileName) == null)
DataCache.SetCache(fileName, LoadConfigFile(fileName, type));
DateTime newfileChangeTime = File.GetLastWriteTime(fileName);
if (!newfileChangeTime.Equals(fileChangeTime[fileName]))
{
DataCache.SetCache(fileName, LoadConfigFile(fileName, type));
return LoadConfigFile(fileName, type);
}
else
{
return DataCache.GetCache(fileName) as IConfiger;
}
}
}


实事上,使用cache使用的流程是:如果cache里没有文件的缓存,就向从文件缓存到cache,再判断是否文件被修改过,如果没有直接返回cache中的实体配置信息,如果文件已经被修改,就从文件中取回,并同时存入缓存。

以下是.net cache的操作功能类代码:

namespace ConfigCache
{
public class DataCache
{
/// <summary>
/// 得到cache键所对应的值
/// </summary>
/// <param name="CacheKey"></param>
/// <returns></returns>
public static object GetCache(string CacheKey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
return objCache[CacheKey];
}
/// <summary>
/// 将指定值设置到cache键上
/// </summary>
/// <param name="CacheKey">键</param>
/// <param name="objObject">值</param>
public static void SetCache(string CacheKey, object objObject)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(CacheKey, objObject);
}
/// <summary>
///  将指定值设置到cache键上
/// </summary>
/// <param name="CacheKey">键</param>
/// <param name="objObject">值</param>
/// <param name="absoluteExpiration">绝对过期时间</param>
/// <param name="slidingExpiration">相对过期时间</param>
public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);
}

/// <summary>
/// 移除指定cache键
/// </summary>
/// <param name="CacheKey"></param>
public static void RemoveCache(string CacheKey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Remove(CacheKey);

}

}
  }


这下子,应该有的都有了,业务分别了,性能也上去了,咱们的服务型配置文件的实现也就讲完了,呵呵,各位晚安了!

相关文章:

面向服务架构~全局配置文件也面向服务了

面向服务架构~全局配置文件也面向服务了~续(对性能的优化)

面向服务架构~全局配置文件也面向服务了~再续(引入Cache机制)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: