SqlCacheDependency的使用
最近项目需要几秒就获取一次数据,查数据库服务器压力会很大,因此用缓存技术来缓解服务器压力。
使用SqlCacheDependency采用轮询的方式来获取缓存,SqlDependency查询通知的方式来更新缓存应该更好,先说轮询的方式吧。
配置文件如下:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<caching>
<sqlCacheDependency enabled="true" pollTime="10000">
<databases>
<add name="msBaby" connectionStringName="conn"/>
</databases>
</sqlCacheDependency>
</caching>
</system.web>
<connectionStrings>
<add name="conn" connectionString="data source=SH-05\SA;initial catalog=Baby;user id=sa;password=123456;Asynchronous Processing=true;MultipleActiveResultSets=true;Integrated Security=True"/>
</connectionStrings>
</configuration>
其中 connectionStringName="conn"是connectionStrings的name,name="msBaby" 中,msBaby就是数据库名称。
以下是代码示例:
基类
public class BaseCache
{
private string connectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
/// <summary>
/// 获取缓存数据
/// </summary>
/// <param name="cacheName">缓存名</param>
/// <param name="dataBaseName">数据库名</param>
/// <param name="tableName">表名</param>
/// <returns></returns>
public DataTable GetCacheData(string cacheName, string dataBaseName, string tableName)
{
DataTable data = (DataTable)HttpRuntime.Cache[cacheName]; //获取缓存
// 判断缓存数据为空
if (data == null)
{
// 获取数据
data = GetDataSource();
SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, tableName);
SqlCacheDependency depend = new SqlCacheDependency(dataBaseName, tableName);
HttpContext.Current.Cache.Insert(cacheName, data, depend);
}
return data;
}
public virtual DataTable GetDataSource()
{
return null;
}
}
数据库帮助类
public class DBHelper
{
private static string connectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
public static DataTable GetData(string sql, params SqlParameter[] parameters)
{
DataTable data;
try
{
SqlConnection conn = new SqlConnection(connectionString);
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddRange(parameters);
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
data = new DataTable();
dataAdapter.Fill(data);
}
}
catch (Exception)
{
throw;
}
return data;
}
}
子类重写GetDataSource方法
public class Job : BaseCache
{
public override DataTable GetDataSource()
{
return DBHelper.GetData("SELECT TOP 50 * FROM job");
}
}
外部类中调用
Job job = new Job();
DataTable dt = job.GetCacheData("jobCache", "msBaby", "job");
这里的msBaby与webconfig中相同,job是数据库表名称。
<databases>
<add name="msBaby" connectionStringName="conn"/>
</databases>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。