数据库轮询缓存依赖。

一、数据库轮询缓存依赖。

 


上面的步骤要我们自己动手实现起来很麻烦,没关系跟着微软混是不会吃亏滴,微软早就为我们提供好了一个工具叫Aspnet_regsql.exe 这个工具位于C:\Windows\Microsoft.NET\Framework\v2.0.50727这个路径下(也不一定但是一般就是这个路径)

双击Aspnet_regsql.exe进行记录监控信息的表创建一个用于记录监控信息的表,表的字段就两个一个是表名,一个是版本号。然后,对需要监控的变增加一个触发器,当表的内容发生变化的时候进行触发。我们可以用insert delete update 触发器,如果一旦触发以上动作就在把那个监控表的版本号字段加1


启用数据库AudioManagerProduct_DB缓存依赖支持,并对TBL_AMC_scenic表启用缓存依赖,如下:

  aspnet_regsql -S .-E -ed -d AudoManagerProduct_DB-et -t TBL_AMC_Scenic

 

1、web.config配置文件的更改。

(1)、

     <connectionStrings>
<add name="ProductDB" connectionString="Data Source=192.168.1.67;

Initial Catalog=AudioManagerProduct_DB;User ID=iscenes.com;

PassWord=iscenes.com.cn"></add>
</connectionStrings>

(2)、在system.web节点下配置

<caching>
<sqlCacheDependency enabled="true" pollTime="60000">
<databases>

--每隔9秒钟就会去AudioManagerProduct_DB数据库中查询TBL_AMC_Scenic表

--是否有变化。
<add name="ProductDB" connectionStringName="ProductDB"

pollTime="90000"></add>
</databases>
</sqlCacheDependency>
</caching>

2、页面代码

publicpartialclass_Default:System.Web.UI.Page
{
protectedSystem.Text.StringBuilder sbHtml =newSystem.Text.StringBuilder();
protectedvoidPage_Load(object sender,EventArgs e)
{
List<Home> list =Cache["homeList"]asList<Home>;
//此时给缓存设置为5天过期时间,不过这期间,缓存依赖会9秒轮询一次数据库,
//如果数据库中相应的表有变动,就会自动删除缓存中数据,重新从数据库读取数据
//如果数据库中没有数据的更改,且缓存没有过期,就会从缓存中读取数据

if(list ==null)
{
Response.Write("<h3>从数据库中获得的数据</h3>");
HouseEntities houseEntities =newHouseEntities();
list = houseEntities.Home();

//基于数据库的缓存依赖
SqlCacheDependency sqldep =newSqlCacheDependency
("ProductDB","TBL_AMC_Scenic");
Cache.Insert("homeList", list, sqldep,DateTime.MaxValue,TimeSpan.FromDays(5));
}
else
{
Response.Write("<h3>从缓存获取的数据</h3>");
}
foreach(Home item in list)
{
sbHtml.Append("Id:"+ item.Id+"Name:"+ item.Name+"Address:"+ item.Address+"<br/>");
}
Response.Write(sbHtml.ToString());
}
//注意:SqlCacheDependency sqldep = new SqlCacheDependency("pubs", "Home");
}
publicclassHome
{
publicintId{get;set;}
publicstringName{get;set;}
publicstringAddress{get;set;}
}
publicclassHouseEntities
{
publicList<Home>Home()
{
List<Home> home =newList<Home>();
string strcon =System.Configuration.ConfigurationManager.
ConnectionStrings["ProductDB"].ToString();
SqlCommand sqlcom =newSqlCommand();
using(SqlConnection sqlcon =newSqlConnection())
{
sqlcon.ConnectionString= strcon;
string sql ="SELECT ScenicId,ScenicName,ProvinceName from dbo.TBL_AMC_Scenic";

DataSet dt =SqlHelper.ExecuteDataset(sqlcon,CommandType.Text, sql);

if(dt.Tables.Count>0&& dt.Tables[0].Rows.Count>0)
{
for(int i =0; i < dt.Tables[0].Rows.Count; i++)
{
Home h =newHome();
h.Id=int.Parse(dt.Tables[0].Rows[i]["ScenicId"].ToString());
h.Name= dt.Tables[0].Rows[i]["ScenicName"].ToString();
h.Address= dt.Tables[0].Rows[i]["ProvinceName"].ToString();
home.Add(h);
}
}
}
return home;
}
}



CREATE TABLE [dbo].[TBL_AMC_Scenic](
    [ScenicId] [varchar](50) NULL,
    [ScenicName] [varchar](50) NULL,
    [ProvinceName] [varchar](50) NULL
)

posted on 2012-11-09 10:01  oer  阅读(2405)  评论(0编辑  收藏  举报

导航