【问题标题】:Sharing cache between multiple web-sites在多个网站之间共享缓存
【发布时间】:2011-03-11 15:17:13
【问题描述】:

我们有大约 50 个网站,在不同的应用程序池中运行,它们从一个公共缓存数据库中读取(使用 Microsoft 企业库缓存应用程序块)。

我们目前有一个控制台应用程序,它会在每天凌晨 3 点填充缓存。但是,我们想摆脱这个应用程序并让缓存自动刷新过期项目,使用 ICacheItemRefreshAction 接口。

我们将在 50 个网站的每一个的 Global.asax 中创建我们的缓存对象。但是,我担心的是,如果我们在 Global.asax 中设置缓存过期策略,这 50 个网站中的每一个都会触发刷新操作,从而导致数据被重新缓存 50 次。

我们不希望只有 1 个网站设置过期策略,因为这样其他 49 个网站将依赖于该 1 个网站,这是架构上的禁忌。

鉴于这些限制 - 有什么建议吗?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    坚持你所拥有的。

    如果在凌晨 3 点填充缓存的控制台应用程序的性能可以接受,请继续使用它。如果您需要更多/更少频繁地刷新缓存,您可以随时更改调用它的粒度。

    如果您希望 ICacheItemRefreshAction 启用更精细的粒度(即,某些项目在 24 分钟后从缓存中掉出,有些在 24 小时后),那么请考虑使控制台应用程序更加灵活,以便可以告诉它哪些部分缓存失效并重新填充。

    您的问题中缺少的一点有助于完善答案的信息是您为什么要摆脱控制台应用程序,也许更重要的是,为什么你想改用ICacheItemRefreshAction 界面吗?

    【讨论】:

    • 严格来说,我们还没有实现控制台应用程序——我说过我们必须简化问题。我们想要摆脱它的原因是我们没有服务器来运行它。我很欣赏这听起来很荒谬的理由,但我在一家大公司工作,有政策、程序和预算给我们的生活带来问题,鉴于我们将在某个地方做一些工作,我认为有一个适当过期的缓存是一个更优雅的解决方案,它会删除一个非常适合我们部署策略的组件。
    【解决方案2】:

    也许您可以看看其他缓存解决方案,如 memcached、NCache 或 Velocity。

    这样您就可以拥有所有站点共享的缓存。

    【讨论】:

    • 我们的所有站点都共享一个缓存——它是企业库缓存。我们想要的是一种拥有缓存对象的单例实例的方法。除非您建议为我们的缓存设置缓存 - 我认为这可行,但如果可能的话,我更喜欢更优雅的解决方案!
    • 这个库是否有一个 API 来迭代缓存中的现有对象?如果是这样,您可能会让所有网站触发一些代码,仅当项目在过去 X 分钟内未刷新时才会刷新。
    • 我认为我们可以做这样的事情,但是 EL 缓存已经有非常复杂的过期策略(滑动时间、绝对、基于文件等),所以我们宁愿重新发明轮在这里。我们的目标是简化问题,而不是让它变得更复杂!不过感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多