缓存看起来从未在ASP.NET SQL中进行过

时间:2014-02-24 16:37:24

标签: asp.net sql sql-server caching

我正在使用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的值是负数。每当我刷新页面(页面应该从缓存中检索数据)时,页面就会从数据库中检索数据。

出了什么问题,解决方案是什么?有两件重要的事情要知道:

  1. 当没有缓存时,页面仅从数据库中检索(当用户插入数据时将删除缓存)

  2. 当用户没有任何更新/新数据时,页面将从缓存中检索(例如,用户只需刷新页面,页面从缓存中检索)

  3. 请帮忙。感谢您的时间和关注。

0 个答案:

没有答案