数据库缓存依赖(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:相关联的表名
零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。
零七广告