C#缓存依赖与数据库

控制器代码:

Cache cache = HttpRuntime.Cache;//定义缓存
            //获取连接字符串
            string strConn = ConfigurationManager.ConnectionStrings["strConn"].ConnectionString;
            //判断缓存是否有值
            if (cache["sqlCache"] == null)
            {
                ///////ADO操作//////
                DataTable dt = new DataTable();
                SqlConnection conn = new SqlConnection(strConn);
                SqlCommand cmd = conn.CreateCommand();
                string strSql = "select ID,Name from dbo.[CacheInfo]";
                cmd.CommandText = strSql;
                cmd.CommandType = CommandType.Text;
                //设置缓存依赖在填充数据之前
                SqlCacheDependency sqlC = new SqlCacheDependency(cmd);
                //设置缓存依赖
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                sda.Fill(dt);//执行成功则dt有值
                ///////ADO操作//////
                //参数:“缓存名称”,“缓存的数据”,缓存依赖,缓存过期时间,平滑过期时间,缓存级别,缓存的回调函数
                cache.Insert("sqlCache", dt, sqlC, DateTime.Now.AddDays(1), TimeSpan.Zero, CacheItemPriority.Default, null);
            }

            else
            {
                //直接从缓存中取值
                DataTable dt = (DataTable)cache["sqlCache"];
            }

Global.asax 代码:

//缓存依赖一个参数:strConn :数据库连接字符串
string strConn = ConfigurationManager.ConnectionStrings["strConn"].ConnectionString;
SqlDependency.Start(strConn);

Web.config 代码:

<!--数据库连接字符串-->

  <connectionStrings>
    <add name="strConn" connectionString="server=.;database=CacheDenpendencyInfo;uid=sa;pwd=123456;" providerName="System.Data.SqlClient"/>
  </connectionStrings>

WebConfig <system.web>节点下配置:
<!--数据库缓存依赖的配置节点-->
    <caching>
      <!--enabled是否启用缓存依赖,pollTime 间隔时间,多久监听一次数据库,时间单位毫秒-->
      <sqlCacheDependency enabled="true" pollTime="2000">
        <databases>
          <!-- connectionStringName 数据库配置节点的名称-->
          <add name="con" connectionStringName="strConn"/>
        </databases>
      </sqlCacheDependency>
    </caching>


数据库执行:CacheDenpendencyInfo:库名
SELECT is_broker_enabled FROM sys.databases WHERE name = 'CacheDenpendencyInfo'   结果为 1 是代表有效

ALTER DATABASE CacheDenpendencyInfo SET NEW_BROKER WITH ROLLBACK IMMEDIATE; //一起执行
ALTER DATABASE CacheDenpendencyInfo SET ENABLE_BROKER;//一起执行

猜你喜欢

转载自www.cnblogs.com/LaoWang666/p/8909501.html