我正在建立新闻网站。我正在使用System.Web.HttpRuntime.Cache
来缓存来自sql server数据库的检索到的新闻。缓存数据取决于 mytable
的代码
public static List<NewsItem> RetriveTop5VideosLastMonth()
{
// if null then fetch from the database
if (System.Web.HttpRuntime.Cache["topvideos"] == null)
{
using (SqlConnection dbConnection = getConnection())
{
// Create the cache dependency
SqlCacheDependency dep = new SqlCacheDependency("mytable", "news");
SqlDataAdapter ad = new SqlDataAdapter("RetriveTop5VideosLastMonth", dbConnection);
ad.SelectCommand.CommandType = CommandType.StoredProcedure;
DataSet ds = new DataSet();
ad.Fill(ds);
List<NewsItem> lst = new List<NewsItem>();
foreach (DataRow item in ds.Tables[0].Rows)
{
lst.Add(new NewsItem() { id = item["id"].ToInt(), link = item["link"].ToString(), title = item["title"].ToString(), category = item["category"].ToString(), description = item["description"].ToString(), entry_date = Convert.ToDateTime(item["entry_date"].ToString()), image = checkEmptyImage(item["image"].ToString()), source = item["source"].ToString(), views = item["views"].ToInt() });
}
// put in the cache object
System.Web.HttpRuntime.Cache.Insert("topvideos", lst, dep);
}
}
return System.Web.HttpRuntime.Cache["topvideos"] as List<NewsItem>;
}
因此,当mytable的数据发生变化时,它应该删除缓存的数据。在windows azure我更改mytable数据但缓存数据仍然存在!哪里是我的错?
答案 0 :(得分:0)
使用SqlDependency进行HttpRuntime缓存在Azure中运行良好。在创建SqlCacheDependency之前,需要使用SqlDependency.Start方法启动侦听器。有关更多详细信息,请查看示例dotnet.dzone.com/articles/c-sqldependency-monitoring
SqlDependency.Start方法启动侦听器以从连接字符串指定的SQL Server接收依赖项更改通知。如果基础数据发生了一些变化,SQL Server会检测到它们,并通过SqlDependency.Start方法创建的底层SqlConnection向客户端发布通知。
请注意,必须为每个SqlDependency.Start调用调用SqlDependency.Stop方法以释放侦听器。