2011-03-08 74 views
0

我不知道是否有任何高速缓存引擎,或者如果有人有一个很好的解决方案,可以处理这些要求:动态输出缓存

  • 应该储存像ASP标准输出缓存页面的纯HTML片段。 net
  • HTML可能包含来自数据库的动态内容
  • 当数据库中的对象更新时,包含该特定对象的所有缓存HTML片段应在下次被请求时销毁并重新缓存。

有一个单独的管理工具来处理数据库中的所有数据,所以当对象无效时,我可以轻松地将Id存储在缓存表中。我还可以向页面发出请求,销毁该对象的所有缓存的HTML片段。

但是当我编写标记时,我怎么能够从缓存中存储和检索特定的段?因为我可以在后面的代码中做这件事,并在字符串中有标记,但我不想那样做。我想尽可能保留标记。

回答

0

我假设这是一个ASP .Net页面。我觉得你的情况是,你可以这样写缓存机制自己很简单:

  • 让您的SQL查询像往常一样
  • 使用结果输出你的aspx页面
  • 将结果保存到一个静态变量或静态的“缓存”类,这应该坚持从请求请求

未来的请求会使用您的存储结果,除非他们是无效的,因为你提到他们会。 (根据我的经验,1分钟的时间到期可以很好地工作)。

如果您想要得到更复杂的结果,并且即使重新启动IIS,也要保留缓存:您可以轻松使用XmlSerializer并将结果写入文件而不是使用静态变量。

0

您有两个问题需要考虑:

编号1:缓存失效。这可以通过使用缓存依赖关系来解决(请参阅http://msdn.microsoft.com/en-us/library/system.web.caching.cachedependency.aspx),这将允许事件无效并在数据更改时自动回收(自动!)。

编号2:高速缓存存储。为此,只需使用标准的ASP.Net缓存API使用HttpContext.Current.Cache(或适当的抽象)即可。如上所述,这支持依赖系统。

ASP.Net缓存实现是可插入的,因此您可以更改内存,文件,SQL数据库,Memcached(通过Enyim)或Microsoft Velocity之间的存储机制。每个缓存存储具有不同的可靠性,您可以根据自己的要求选择和选择。