none
web应用程序缓存求解......急 RRS feed

  • 问题

  • 我手头有个.NET的web项目,功能都基本完善了,现在需要做优化,就是对数据进行数据缓存。我知道缓存有页面缓存,局部缓存,自定义缓存。。请问如何使缓存依赖数据库呢?当数据库数据变化时候,能够及时更新缓存数据。由于项目的基本更能都已经实现了。。我想在数据变更频繁的地方是不是也需要缓存呢。。比如是条件查询,有不同的查询条件可选(时间,标题,内容,作者等条件) 那么我还需要对数据缓存吗?先前做项目的时候,需要数据都是直接对数据库查询的。现在如果加入缓存的话,我们在查找数据的时候,就得先查询是否有缓存,获得缓存中数据显示,这样修改量很大,可能修改时对代码逻辑造成错误,出现BUG.有没有写一个公用类呢,或者可以config配置来实现对数据库监听判断更新缓存呢。
    • 已移动 孟宪会Moderator 2010年9月1日 1:12 (发件人:.NET Framework 一般性问题讨论区)
    2010年8月26日 12:16

答案

  • 对数据库的缓存依赖,.net目前并不支持oracle数据库(方法可以参考转帖文章)》

    public partial class _Default : System.Web.UI.Page 
    {
        string connstr;

        protected void Page_Load(object sender, EventArgs e)
        {
            connstr = "server=.;dataBase=MIS;uid=sa;password=123";
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            //-------------------文件依赖缓存--------------------- 

            DataTable dt=getInfo();

            CacheDependency cd=new CacheDependency(Server.MapPath("file.txt"));

            Cache.Insert("Data",dt,cd);
        }

        private DataTable getInfo()
        {
            
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                string sql = "select * from mis";
                
                SqlCommand cmd = new SqlCommand(sql,conn);
                conn.Open();
                SqlDataAdapter ada = new SqlDataAdapter(cmd);

                DataTable dt = new DataTable();

                ada.Fill(dt);

                return dt;
            }
      
        }


        protected void Button3_Click(object sender, EventArgs e)
        {

            //-------------显示数据----------- 

            if (Cache.Get("Data") != null)
            {
                DataTable dt = Cache.Get("Data") as DataTable;
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
            else
            {
                //缓存过期 
                Response.Write("Cache is null");
            }
            
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            //-------------MSSQL数据库依赖缓存-------------------- 

            string dbname = "MIS";    //注意,数据库必须在web.config中做相应的配置 
            string tblname = "mis";

           //启用指定数据库,数据表的缓存依赖 
            SqlCacheDependencyAdmin.EnableTableForNotifications(connstr, tblname);

            SqlCacheDependency scd = new SqlCacheDependency(dbname,tblname);

            DataTable dt = getInfo();
            Cache.Insert("Data", dt, scd);
            
        }

    }

     

    web.config:


    <connectionStrings>
        <add name ="mis" connectionString ="server=.;dataBase=MIS;uid=sa;password=123"/>
      </connectionStrings>
    <system.web>
        <caching >
          <sqlCacheDependency >
            <databases >
              <add name="MIS" connectionStringName="mis"/>
            </databases>
          </sqlCacheDependency>
        </caching>
    </system.web>

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/JustLovePro/archive/2008/11/07/3248697.aspx

    2010年8月27日 3:08