最近没什么事。研究了下SqlCacheDependency缓存。准备在下一个项目中使用。但是有些疑问。既然缓存优点这么多。是不是在程序里面使用的缓存越多越好。就比如你的数据库有100个表。在每个表进行查询显示的时候都是用缓存来实现。如果不是这样的话。应该如何合理使用缓存。
还有一点就是。web.config里面配置的下面这个代码
<caching>
<sqlCacheDependency enabled="true" pollTime="60000">
<databases>
<add connectionStringName="NorthwindConnectionString" name="Categories"/>
</databases>
</sqlCacheDependency>
</caching>
这里面的 <add connectionStringName="NorthwindConnectionString" name="Categories"/> 这个里面name属性是代表什么。一定要和数据库表名相同吗。
还有一个问题就是关于读取和使用的问题。
如果我有a b c 三个表。我要对这三个表进行查询操作。并且使用缓存。
那么是不是我得每个表都去判断是否已经拥有该表的缓存。如果有就直接取缓存。否则就执行查询数据库。如下代码
//读取数据
public DataView getFromCache(string Key) {
if (HttpRuntime.Cache[Key] == null)
{
//取数据
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
SqlCommand comm = new SqlCommand("SELECT [CategoryID], [CategoryName], [Description] FROM [Categories]", conn);
SqlDataAdapter sda = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
conn.Open();
sda.Fill(ds);
DataView dv = ds.Tables[0].DefaultView;
conn.Close();
//启用更改通知
SqlCacheDependencyAdmin.EnableNotifications(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
//连接到 SQL Server 数据库并为 SqlCacheDependency 更改通知准备数据库表
SqlCacheDependencyAdmin.EnableTableForNotifications(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString, "Categories");
//制定缓存策略
SqlCacheDependency scd = new SqlCacheDependency("Categories", "Categories");
//插入缓存
HttpRuntime.Cache.Insert(Key, dv, scd);
return dv;
}
else {
//从缓存中取值
return (DataView)HttpRuntime.Cache[Key];
}
}
是不是在任何地方我只要使用到 缓存 就需要这样写
if (HttpRuntime.Cache[Key] == null)
{
}
else
{
}
1. 100 个表都可以使用缓存,缓存可以自动管理,将使用度比较低的数据换出内存。
2. 配置中的 name 不需要和数据库同名,它用在 Sql 缓存 SqlCacheDependency 的时候,用在程序中指出使用的缓存条目。
3. 是的,你用到数据的时候,都应该先检查缓存中是否已经存在。
补充问题 4. 对于一个数据库来说,只需要一条配置。等十几秒的问题在于你使用了轮询机制。