【发布时间】:2013-12-14 00:23:10
【问题描述】:
场景:
在 Web 农场场景的 ASP.Net 应用程序的 WCF 层中实现主数据的内存缓存
- 数据在首次访问服务层时缓存,例如,缓存的 GetCountryList() 方法的到期时间设置为午夜。假设缓存键是“CountryList_Cache”
- 所有后续请求都通过缓存提供服务'
- 如果使用主屏幕更新国家/地区列表,则会进行额外调用以使“CountryList_Cache”无效并将新数据加载到其中
- 下一个呼叫现在收到更新的国家/地区列表 上述步骤在单服务器场景中很容易,因为步骤 3 只需要对一个服务器进行缓存到期调用。当我们有 2 或 3 台负载平衡的 Web 服务器时,复杂性会增加,因为在这种情况下,缓存仅在其中一台服务器上更新(通过主屏幕),但必须在所有 3 台服务器上失效。
我们提出的解决方案:
我们打算有一个外部服务/exe/网页,它会知道所有负载平衡的服务器(通过配置文件)。为了使特定的缓存失效,我们会调用这个外部组件,这反过来会使所有 Web 服务器上的相应缓存键失效,并加载并缓存最新的数据。
问题:
虽然上述方法对我们有用,但我们认为它对于企业级 LOB 应用程序来说不是一种干净的方法。是否有更好/更清洁的方法来实现跨多个服务器的缓存到期?
注意:
- 与进程内/内存中缓存相比,由于明显的性能损失,我们不想使用分布式缓存
- 已使用 System.Runtime.Caching 实现缓存
- 我们已经处理过 SQL 依赖并在单个 Web 服务器的场景中使用它
【问题讨论】: