2011-12-28 64 views
0

我正在研究使用我的.NET 3.5服务的企业缓存块缓存来自数据库的一堆静态数据。使用企业缓存块立即刷新整个缓存

从我读过的一切来看,似乎FileDependency是存储不会经常过期的静态数据的最佳选择。但是,当文件发生更改并刷新高速缓存时,我需要回调一次才能为特定高速缓存执行一些后期处理。如果我在向缓存中添加一个项目的过程中实现ICacheItemRefreshAction并注册它,我会为它们中的每一个回调一个回调。

有没有办法为整个缓存注册一个回调,这样当缓存刷新时我看不到成千上万的回调被调用?

感谢

+0

作为一个后续,是否有比使用FileDependency从数据库中缓存静态数据更好的方法。例如,如果我想缓存我们支持并驻留在数据库上的国家及其货币代码列表。除非我们手动在数据库中插入新条目,否则这些数据不会更改。有更好的方式依赖我可以用来触发更改并刷新缓存? – mvm 2011-12-28 23:30:28

回答

0

为了解决你的跟进比FileDependency更好的方法:你可以在ICacheItemExpiration紧裹SqlDependency。有关示例代码,请参见SqlCacheDependency with the Caching Application Block

该方法只适用于SQL Server,并需要设置Service Broker。

在高速缓存级别回调方面,我没有看到实现这一点的开箱即用方式;几乎所有东西都与物品等级相关。你可以做的是创建你自己的CacheManager实现,它具有缓存级别的回调。

另一种方法可能是让ICacheItemRefreshAction只在缓存为空时执行任何操作(即最后一项已被删除)。