Cache缓存,怎么实现与数据库同步?

解决方案 »

  1.   

    如果数据库是SQL Server,可以使用SqlDependency进行缓存:
    http://www.cnblogs.com/tuyile006/archive/2010/02/01/1660910.html
      

  2.   

    使用SQLDependency缓存依赖,以下是一个推SQL缓存依赖的例子,当数据库更新后缓存会自动更新
    void Page_Load()
    {
      DataTable movies=(DataTable)Cache["Movie"];
      if(movie=null)
      {
      SqlDataAdapter adpter=new SqlDataAdatper("Select * From Movie",sqlConnection);
      SqlCacheDependency sqlDepend=new SqlCacheDependency(adapter.SelectCommand);
      movies=new DataTable();
      //注意必须在adpter.Fill()前先建立SqlCacheDependency,否则无效
      adpter.Fill(movies);
      Cache.Insert("Movie",movies,sqlDepend);
      }
    }
      

  3.   

    如果系统的数据修改都是经过你的程序处理的,其实不需要任何数据库支持就能处理数据同步。比如我们使用 
       Cache["abc最后写入时间"]=DateTime.Now.Ticks;
    来作为所有关于abc类型数据的缓存刷新key,那么在将一个abc类的对象放入Cache时写:
       Cache.Insert(key,data,new CacheDependency(null,new string[]{"abc最后写入时间},...,...);
    这样就能在前一个Cache数据被修改时自动通知后面的缓存数据清空。于是,在你更新abc这类数据时,记得再写上面代码,就能通知整个系统中所有(也许有上千个)abc相关的数据缓存都清空。这不需要任何数据库系统支持,在你的系统内部实现就行。这需要你的公司自己有一个.net方面的架构设计师,在自己的公司的产品中能够把握、督导整个开发团队。
      

  4.   

    SqlCacheDepency很时髦,所以我能理解很多人对他印象深刻。但是,其实Cache、CacheDepandency这个东西远在SqlCacheDepency之前几年的asp.net中就已经实现了。你甚至可以继承CacheDependency类型而创造自己的缓存依赖系统(尽管lz的问题很简单根本不需要继承和创造新东西)。因此,用好CacheDependency,已经很好了!
      

  5.   

    恩,应该是少写了一个)号。Cache.Insert(key,data,new CacheDependency(null,new string[]{"abc最后写入时间},...,...);改为Cache.Insert(key,data,new CacheDependency(null,new string[]{"abc最后写入时间}),...,...);
    仔细看看CacheDependency中关于依赖其它Cache单元来实例化它的做法。这也许很少引起人的注意,但是其实是用一个单元来自动化地指挥其它成百上千个单元缓存的关键。