我想知道是否有办法将.NET缓存存储在数据库表或文件中,而不是内存缓存中,还要使用CacheDependency基础结构。我认为企业库可能会这样做,但如果可能的话,我希望更简单。
为了解释,我希望将缓存的数据放在SQL表中或磁盘上的文件中,而不是放在内存中。然后我想指定一个CacheDependency,它可以是SqlCacheDependency,也可以是文件的CacheDependency或AggregateCacheDependency。
原因是,我基于xml文档进行了大量计算(每天更改一次)。这些计算的结果我在内存中缓存。但是,如果重置网站,则缓存将丢失。在数据库中安装备份缓存会很不错。
答案 0 :(得分:1)
使用SqlCacheDependency。您需要自己手动管理目标数据,但是您可以在缓存中具有依赖关系,当目标表发生更改时,该关联自动失效。
修改强>
是的,您可以使用企业库中的缓存块来创建缓存提供程序,该缓存提供程序使用数据访问块(Data Access Block)来存储数据库中的项目,这是ASP.NET的替代方法。尽管学习曲线较高,但这可能是最好的解决方案。
我认为SqlCacheDependency
更简单,因为您使用ASP.NET缓存首先存储本地内存版本以加快处理速度,当本地层没有可用项目时,回退到数据库层。这是我的意思的一个例子:
您的网络应用程序调用{{1}}以获取可以使用的内容
该方法首先检查ASP.NET缓存中的项目 - 如果项目存在,那很好,你返回
如果该项不存在,则检查数据库是否存在该项 - 如果该项存在,则在数据库表上使用GetXmlDocument(string key)
重新填充本地缓存项,并返回XML数据
如果数据库中也不存在该项,则从主源的任何位置检索XML数据,重新填充数据库,使用SqlCacheDependency
重新填充本地缓存项。表,并返回XML数据
这为您提供了一个自我管理的双层缓存。