您的位置:首页 > 数据库

【转】系统缓存全解析二:动态缓存(3)-文件,对象缓存依赖与数据库缓存依赖

2012-07-13 16:57 691 查看
(依据文件,数据库,表等变化而自动更新缓存内容)

一,缓存文件:

简单语言介绍以下,将硬盘中的文本文件缓存至web服务器内存中,一般常用在缓存配置文件或其他公共文件上,并自动监听文件是否有被修改,一旦被修改,将自动的更新缓存。因为与下面的数据库缓存依赖基本代码一致,所以不加代码示例。

二,缓存非序列化对象或者序列化对象:

不用多说,就是将对象放入缓存内啦。

三,数据库缓存依赖项:

为了实现.NET缓存依赖需要调用System.Web.Caching下的三个类:

1,Cache类 ;//将数据缓存到该对象内;

2,SqlCacheDependency类;//主要负责为Cache对象 与 数据库表或结果集合建立关系的类

3,SqlCacheDependencyAdmin类;//可忽略不用,以后总结

以及System.Data.SqlClient下的两个类:

1,System.Data.SqlClient.SqlDependency //开启或关闭对于数据库的监听

以及开启MSSQL内某一数据库的消息传递服务:

alter database Common set enable_broker
//开启


alter database Common set disable_broker //关闭

下面是详细的。NET针对MSSQL缓存依赖项的例程:

using System;
using System.Collections.Generic;
using
System.Linq;
using System.Text;
using System.Web.Caching;
using
System.Collections;
using System.Data.SqlClient;
using
System.Data;
using System.Xml;
using
System.Collections.ObjectModel;
using System.Web;


namespace HOSoft.Herp4.AutoTest.Common.Data
{
public sealed
class CacheProvider<T>
{
#region 全局变量
public
static Cache HerpCache = HttpRuntime.Cache;
public static
CacheItemRemovedCallback Callback = new
CacheItemRemovedCallback(CacheProvider<T>.RemovedItemCallBack);

public static TimeSpan timespan;
#endregion

//#region 静态构造函数
//static CacheProvider()
//{

// HerpCache = new Cache();
//}

//#endregion


public static void StartSqlDependency(Collection<string>
StrConnection)
{

if
(StrConnection.Count > 0)
{
foreach (string
str in StrConnection)
{

SqlDependency.Start(str);
}
}
}


public static void StopSqlDependency(Collection<string>
StrConnection)
{
if (StrConnection.Count >
0)
{
foreach (string str in
StrConnection)
{

SqlDependency.Stop(str);
}

}
}


public static SqlCacheDependency
CreateSqlCacheDependency(SqlCommand Sqlcommand)
{
if
(Sqlcommand.GetHashCode() != 0)
{

SqlCacheDependency SCacheDependency = new
SqlCacheDependency(Sqlcommand);
return
SCacheDependency;
}
else

{
return null;
}
}


public static bool AddItemInCache(string DataName, T DataValue,
SqlCommand Command,String DataBase_Name)
{
if
(!string.IsNullOrEmpty(DataName) && DataValue.GetHashCode() !=
0)
{
if (HerpCache[DataName] ==
null)
{
switch
(DataBase_Name.Trim().ToLower())

{
case "common": timespan = new TimeSpan(24, 0,
0);
break;


case "house":timespan = new TimeSpan(24, 0,
0);
break;


case "oa":timespan = new TimeSpan(12, 0,
0);
break;


case "report":timespan = new TimeSpan(24, 0,
0);
break;
default:
timespan = new TimeSpan(6, 0, 0);
break;


}
HerpCache.Add(DataName,
DataValue, CreateSqlCacheDependency(Command), Cache.NoAbsoluteExpiration,
timespan, CacheItemPriority.High, Callback);


return true;
}

else
return false;
}

else
return false;
}


public static bool RemoveItemFromCache(string DataName)

{
if (string.IsNullOrEmpty(DataName))

{
if (HerpCache[DataName] != null)

{
HerpCache.Remove(DataName);

return true;


}
else return false;

}
return false;
}


public static void RemovedItemCallBack(string key,Object
value,CacheItemRemovedReason reason)
{
}


}
}


引用地址:http://hi.baidu.com/jiangyangw3r/item/4290ff0235a2d112cd34ea6c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: