.NET:使用CacheDependency在数据库或文件系统中进行缓存

时间:2009-09-23 01:54:16

标签: .net caching

我想知道是否有办法将.NET缓存存储在数据库表或文件中,而不是内存缓存中,还要使用CacheDependency基础结构。我认为企业库可能会这样做,但如果可能的话,我希望更简单。

为了解释,我希望将缓存的数据放在SQL表中或磁盘上的文件中,而不是放在内存中。然后我想指定一个CacheDependency,它可以是SqlCacheDependency,也可以是文件的CacheDependency或AggregateCacheDependency。

原因是,我基于xml文档进行了大量计算(每天更改一次)。这些计算的结果我在内存中缓存。但是,如果重置网站,则缓存将丢失。在数据库中安装备份缓存会很不错。

1 个答案:

答案 0 :(得分:1)

使用SqlCacheDependency。您需要自己手动管理目标数据,但是您可以在缓存中具有依赖关系,当目标表发生更改时,该关联自动失效。

修改

是的,您可以使用企业库中的缓存块来创建缓存提供程序,该缓存提供程序使用数据访问块(Data Access Block)来存储数据库中的项目,这是ASP.NET的替代方法。尽管学习曲线较高,但这可能是最好的解决方案。

我认为SqlCacheDependency更简单,因为您使用ASP.NET缓存首先存储本地内存版本以加快处理速度,当本地层没有可用项目时,回退到数据库层。这是我的意思的一个例子:

  • 您的网络应用程序调用{​​{1}}以获取可以使用的内容

  • 该方法首先检查ASP.NET缓存中的项目 - 如果项目存在,那很好,你返回

  • 如果该项不存在,则检查数据库是否存在该项 - 如果该项存在,则在数据库表上使用GetXmlDocument(string key)重新填充本地缓存项,并返回XML数据

  • 如果数据库中也不存在该项,则从主源的任何位置检索XML数据,重新填充数据库,使用SqlCacheDependency重新填充本地缓存项。表,并返回XML数据

这为您提供了一个自我管理的双层缓存。