控制器代码:
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;//一起执行