数据库缓存依赖(SqlCacheDependency)的实现

我们知道,在数据库中查询数据是十分耗费性能的事情,所以说对数据库的缓存变的非常重要。然而出现了问题,缓存的是老的数据,而数据库的内容却是实时更新的。造成了数据的不一致。为了解决这种问题,.net给我们提供了一种很好的解决方案,就是数据库缓存依赖(SqlCacheDependency)。

要实现数据库缓存依赖的步骤如下

1.修改WebConfig文件,启用SqlCacheDependency

<configuration>

<appsetting/>

<connectionString>

<Add name="strCon" ConnecationString="data source=(local);database=NorthWind;uid=sa;pwd=sa" ProviderName="System.Data.SqlClient">

</connectionString>

<system.web>

<caching>

<sqlCacheDependency enabled="true" polltime="5000">

<database>

<add name="NorthWind" connectionStringName="strCon">

</database>

</sqlCacheDependency>

</caching>

</system.web>

</configuration>

2.执行命令,启用数据库依赖

aspnet_regsql -C "data source=(local);database=NorthWind; uid=sa;pwd=sa" -ed -et -t “tb_Product”

执行完毕后,数据库中自动成一个缓存表:AspNet_SqlCacheTablesForChangeNotification。

3.在代码中启用缓存

//获取缓存

using System.Web.Caching;

using System.Data.SqlClient;

Public static object GetCache(string cacheKey)

{

Cache objCache=HttpRuntime.Cache;

return objCache[cacheKey];

}

//以缓存依赖的方式缓存数据

Public static void SetCache(string cacheKey,object objSubject,CacheDependency dep)

{

Cache objCache=HttpRuntime.Cache;

objCache.insert(cacheKey,objSubject,dep,Cache.NoAbsoluteExpiration,Cache.NoSlidingExpirtion,CacheItemPriority.Default,null);

}

//查询数据

private DataSet GetData()

{

string strCon=WebConfigurationManager.ConnectionString["strCon"].ConnectionString;

String strSql="select * from tb_Protucts";

Sqlconnection con=new Sqlconnection(strCon);

DataSet myData=new DataSet();

SqlDataAdapter myAdapter=new SqlDataAdapter(strSql,strCon);

con.Open();

myAdapter.Fill(myData,"tb_Product");

con.Close();

return myData;

}

Protected void Page_Load(object sender,EventHandler e)

{

string cacheKey="cacheTest";

object objSubject=GetCache[cacheKey];

if(objSubject==null)

{

objSubject=GetData();

SqlCacheDependency dep=new SqlCacheDependency("NorthWind","tb_Produce");

SetCache(cacheKey,objSubject,dep);

}

GridView1.DataSource=(DataSet)objSubject;

GridView1.DataBind();

}

其中SqlCacheDependency的构造方法如下

public SqlCacheDependency(string DatabaseEntryName,string tableName)

{}

DatabaseEntryName:webConfig中的定义的数据库名

TableName:相关联的表名

转载请注明:代码家园 » 数据库缓存依赖(SqlCacheDependency)的实现

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)