首页 新闻 会员 周边

关于SqlCacheDependency 缓存的一些问题。

0
[待解决问题]

最近没什么事。研究了下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
{

}

 

问题补充: 还有一点就是。如果有 a b c 三个表要使用缓存。我是不是需要在web.config 里面配置三个<add connectionStringName="NorthwindConnectionString" name="Categories"/> 这样的节点。这里面的Key 好像不一定要和 这里的name 一样。 改成其他的好像也一样啊。这里的配置和 这里的程序又什么关联吗. 还有为什么 更改数据库里面的内容后。好像好等10几秒再刷新网页后。才能清除缓存。数据才能重新读取。2005 和2008 还需要去手动开启这个功能吗。
yzy的主页 yzy | 菜鸟二级 | 园豆:317
提问于:2010-12-23 10:10
< >
分享
所有回答(1)
0

1. 100 个表都可以使用缓存,缓存可以自动管理,将使用度比较低的数据换出内存。

2. 配置中的 name 不需要和数据库同名,它用在 Sql 缓存 SqlCacheDependency 的时候,用在程序中指出使用的缓存条目。

3. 是的,你用到数据的时候,都应该先检查缓存中是否已经存在。

补充问题 4. 对于一个数据库来说,只需要一条配置。等十几秒的问题在于你使用了轮询机制。

冠军 | 园豆:886 (小虾三级) | 2011-11-29 23:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册