我正在使用SqlCacheDependency
开发包含查询通知的网站。当网站第一次加载时,如果有任何缓存,它将从缓存中检索数据,而相反,如果没有缓存,它将从数据库中检索数据,然后插入缓存。
当用户插入数据并单击按钮时,网站将数据存储到数据库中,删除缓存,因此当页面重定向到自身时,没有缓存,这使得网站应该检索新数据。
以下是代码:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
return;
this.BindGrid();
System.Diagnostics.Debug.WriteLine(Cache.Count);
//cache counts : -4; I don't even know why
}
protected void btnSave_Click(object sender, EventArgs e)
{
this.Insert(this.txtTitle.Text, Convert.ToInt32(this.txtDescription.Text));
//insert just function to update the database
Cache.Remove("Messages");
this.BindGrid();
}
private void BindGrid()
{
DataTable dtMessages = (DataTable)Cache.Get("Messages");
if (dtMessages == null)
{
dtMessages = this.LoadMessages();
lblDate.Text = string.Format("Last retrieved DateTime : {0}", System.DateTime.Now);
}
else
{
lblDate.Text = "Data Retrieved from Cache";
}
grdMessages.DataSource = dtMessages;
grdMessages.DataBind();
}
private DataTable LoadMessages()
{
DataTable dtMessages = new DataTable();
dtMessages = new DataTable();
using (SqlConnection connection = new SqlConnection(this.ConnectionString))
{
SqlCommand command = new SqlCommand("select * from blablabla", connection);
SqlCacheDependency dependency = new SqlCacheDependency(command);
if (connection.State == ConnectionState.Closed)
connection.Open();
dtMessages.Load(command.ExecuteReader(CommandBehavior.CloseConnection));
if (Cache.Get("Messages") == null)
{
Cache.Insert("Messages", dtMessages, dependency);
}
}
return dtMessages;
}
问题是,看起来没有制作/插入缓存。因为Cache.Count
的值是负数。每当我刷新页面(页面应该从缓存中检索数据)时,页面就会从数据库中检索数据。
出了什么问题,解决方案是什么?有两件重要的事情要知道:
当没有缓存时,页面仅从数据库中检索(当用户插入数据时将删除缓存)
当用户没有任何更新/新数据时,页面将从缓存中检索(例如,用户只需刷新页面,页面从缓存中检索)
请帮忙。感谢您的时间和关注。