ASP.NET2.0的数据库缓存依赖保证在表的内容发生改变后才使得缓存失效,这里面其中的意思是不是监视的表里面的内容只要改变,缓存就会失效,就会重新读取数据库?
那么现在我的一个问题就是在一个博客网站上有很多用户,当一个用户添加或者修改了自己的文章,那么有人访问了其他用户的博客的,那么这些博客缓存也都会失效?也都会重新读取数据库吗?如果是的,有什么方法可以使一个用户改变了自己的博客的内容,只有他的博客的缓存失效而不影响其他的用户的博客的缓存呢?

解决方案 »

  1.   

    我知道sql2005可以做到依赖行,但是现在的项目用的是sql2000,sql2000是依赖表的不是吗 
      

  2.   

    你描述的是 SqlDapendency 的行为。实际上我不使用SQL Server做系统,对于不同的数据库或者ORM中间件可以有不同的控制方法,只要实现一个从CacheDependency类继承的子类就可以使用缓存api的方式用代码来设置片段缓存(假设页面被划分为一个或者多个ascx)。不过,我回到你说的那类页面控制。假设你取消sqlDependency,而是使用VaryByCustom来控制,在 GetVaryByCustomString 方法中可以从 HttpConetxt.Current.Request 中获得要显示的博客的id,你可以直接读取一次数据库中的“博客最后更新时间”这个表然后返回这个博客的最后更新时间(转换为字符串)作为函数返回值。当你返回相同结果时,asp.net会自动拿出缓存的html(如果有的话)直接输出而不会去实际创建页面。这样,虽然每一次显示页面时都额外地读取一次数据库查询了一下这个博客的最后更新时间,但是省去了许多次生成页面的时间。
      

  3.   

    可以说,VaryByCustom 是你最应该掌握的。如果有现成的无需编程的缓存依赖控制组件,可以优先使用现成的。如果没有现成的大不了自己动手在 VaryByCustom 自己写。