【问题标题】:Flushing entire cache at once with Enterprise Caching Block使用企业缓存块一次刷新整个缓存
【发布时间】:2012-01-29 13:11:18
【问题描述】:

我正在考虑为我的 .NET 3.5 服务使用企业缓存块来缓存数据库中的一堆静态数据。

从我读过的所有内容来看,FileDependency 似乎是存储不会经常过期的静态数据的最佳选择。但是,当文件更改并刷新缓存时,我需要一次回调以对该特定缓存进行一些后期处理。如果我实现 ICacheItemRefreshAction 并在将项目添加到缓存期间注册它,我会为每个项目获得一个回调。

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

谢谢

【问题讨论】:

  • 作为后续,有没有比使用 FileDependency 缓存数据库中的静态数据更好的方法。例如,如果我想缓存我们支持并驻留在数据库中的国家及其货币代码的列表。除非我们在数据库中手动插入新条目,否则此数据不会更改。有没有更好的方法依赖我可以用来触发更改并刷新缓存?

标签: caching .net-3.5 enterprise-library


【解决方案1】:

比 FileDependency 更好地解决您的后续问题:您可以将 SqlDependency 包装在 ICacheItemExpiration 中。示例代码见SqlCacheDependency with the Caching Application Block。

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

就缓存级别回调而言,我看不出有一种开箱即用的方式来实现它;几乎所有东西都针对项目级别。您可以做的是创建自己的具有缓存级别回调的 CacheManager 实现。

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

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 2011-01-02
    • 2012-12-10
    • 1970-01-01
    • 2011-05-11
    • 2017-04-11
    • 1970-01-01
    相关资源
    最近更新 更多