zoukankan      html  css  js  c++  java
  • SQL 缓存依赖

    SQL 缓存依赖

    作用

    使用SQL 缓存依赖技术,可以实现当应用程序中对应的数据库中的数据发生改变时

    才清除应用程序中对应的缓存,最大化的提高程序的性能。

    实现方法:

     

    一、创建数据库

    a)         数据库不能为动态附加的模式

    b)        启用数据库中的消息传送功能

    alter database CacheDependencyTest set enable_broker

    CacheDependencyTest”为自己建的数据库

    二、在应用程序中合使用SQL 缓存依赖技术

    a)         建立一个Global.asax文件,在其中的“Application_Start”方法添加下面代码:

    //当程序运行时启动sql缓存依赖监听

                string connString = ConfigurationManager.ConnectionStrings["CacheDependencyTestConnectionString"].ConnectionString;

                SqlDependency.Start(connString);

     

     

    b)        在要使用缓存的页面中使用缓存依赖

     

            protected void Page_Load(object sender, EventArgs e)

            {

                //select  语句必须包含确切的列名,表名也要加上所属用户名,

                //例如下面dbo.CacheTable表的dbo就不能略去

                string sql = "SELECT UserName FROM dbo.CacheTable";

     

                string connstring=ConfigurationManager

                    .ConnectionStrings["CacheDependencyTestConnectionString"]

                    .ConnectionString;

                SqlConnection conn=new SqlConnection(connstring);

                SqlDataAdapter da = new SqlDataAdapter(sql, conn);

                 DataTable dt = new DataTable();

                 // 创建一个SQL缓存依赖,要用一个selectCommand做为参数

                    System.Web.Caching.SqlCacheDependency denpendency

                        = new System.Web.Caching.SqlCacheDependency(da.SelectCommand);

                   

                //将数据库中的数据填到dt中,要创建完缓存依赖后才可以填数据

                    da.Fill(dt);

     

                //如果缓存中没有dt这个表,就将表dt添加缓存中

                if (Cache["CacheTable"] == null) {             

                    Cache.Insert(

                        "CacheTable"//缓存名

                        , dt//要缓存的对象,这里是一个DataTable

                        , denpendency//sql缓存依赖对象

                        //缓存过期时间,这里设置为永不过期.

                        //所以会一直到数据库中的表数据发生更改时才会清除缓存

                        ,System.Web.Caching.Cache.NoAbsoluteExpiration

                        //滑动时间,这里设置为0

                        //如果设置为5,代表如果你5秒钟内没有发请求,就从缓存中清除

                        , TimeSpan.Zero

                        );

                    //测试用的,这样在界面才知道数据是不是从缓存读取

                    this.lblFlag.Text = "out of cache"+DateTime.Now.ToString();

                }

                else

                {

                    this.lblFlag.Text = "use cache" + DateTime.Now.ToString();

                }                 

                 //重缓存中读取数据

                this.GridView1.DataSource = Cache["CacheTable"] as DataTable;

                this.GridView1.DataBind();           

            }

     

     

     

    c)        页面代码:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AppCache.aspx.cs" Inherits="cacheTest.AppCache" %>

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

     

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head runat="server">

        <title></title>

    </head>

    <body>

        <form id="form1" runat="server">

        <div>

            <asp:Label ID="lblFlag" runat="server"></asp:Label>

            <asp:GridView ID="GridView1" runat="server">

            </asp:GridView>

           

        </div>

        </form>

    </body>

    </html>

     

  • 相关阅读:
    IMP-00010: 不是有效的导出文件,标题验证失败
    ORA-01261: Parameter db_recovery_file_dest destination string cannot be translat
    oracle启动,提示“LRM-00109: could not open parameter file”
    Linux下oracle数据库启动和关闭操作
    YARN学习总结之架构
    HDFS读写流程
    HDFS学习总结之API交互
    IO编程之NIO
    IO编程之对象序列化
    IO编程之IO流
  • 原文地址:https://www.cnblogs.com/seerlin/p/1358128.html
Copyright © 2011-2022 走看看