zoukankan      html  css  js  c++  java
  • 数据库轮询缓存依赖。

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


    上面的步骤要我们自己动手实现起来很麻烦,没关系跟着微软混是不会吃亏滴,微软早就为我们提供好了一个工具叫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
    )
  • 相关阅读:
    十个html5代码片段,超实用,一定要收藏
    零基础学编程,我想给你这五条建议
    Java 程序员开发常用的工具(二)
    Java 程序员开发常用的工具(一)
    前端人才饱和?平均年薪25W难求优质程序员!
    java基础学习 了解这些很有必要
    初学HTML5技术开发笔记整理
    HTML5移动开发学习笔记之02-CH4-HTML5 Web表单
    web前端笔记之Web前端的安全与漏洞
    5.SSH 免密码登陆
  • 原文地址:https://www.cnblogs.com/oer2001/p/2762062.html
Copyright © 2011-2022 走看看