多个网站之间如何共享缓存

3
我们有大约50个网站,运行在不同的应用程序池中,从一个公共缓存数据库中读取数据(使用Microsoft Enterprise Library Caching应用程序块)。
目前我们有一个控制台应用程序,在每天早上3点填充缓存。然而,我们想要摆脱这个应用程序,使用ICacheItemRefreshAction接口自动刷新过期的项目。
我们原本打算在每个50个网站的Global.asax中创建缓存对象。但是,我的担忧是如果我们在Global.asax中设置了缓存到期策略,那么这50个网站中的每一个都会触发刷新操作,导致数据被缓存50次。
我们不希望只有1个网站设置过期策略,因为那样49个其他网站将依赖于该1个网站,这是一种不好的架构。
在这些限制条件下,有什么建议吗?
2个回答

2

坚持你已有的方法。

如果凌晨3点填充缓存的控制台应用程序的性能表现良好,则继续使用它。如果需要更频繁/不频繁地刷新缓存,可以随时更改调用的粒度。

如果您想将ICacheItemRefreshAction机会改为更细的粒度(即某些项在24分钟后从缓存中消失,某些项在24小时后消失),则考虑使控制台应用程序更加灵活,以便可以告诉它要使哪些缓存无效并重新填充。

您问题中缺少的一个有用信息是:为什么要删除控制台应用程序,或者更重要的是,为什么要开始使用ICacheItemRefreshAction接口?


严格来说,我们还没有实现控制台应用程序 - 我说过我们必须简化问题。我们想要摆脱它的原因是我们没有服务器来运行它。我知道这听起来像一个荒谬的理由,但我为一家大公司工作,有政策、流程和预算使我们的生活麻烦,考虑到我们将在某个地方进行一些工作,我认为拥有一个正确过期的缓存是一个更优雅的解决方案,并且可以消除一个不适合我们部署策略的组件。 - RB.

1
也许您可以考虑一些替代的缓存解决方案,例如 memcached、NCache 或 Velocity。
使用它们,您可以拥有一个被所有站点共享的缓存。

我们有一个由所有网站共享的缓存 - 它是企业库缓存。我们想要的是拥有缓存对象的单例实例。除非您建议为我们的缓存创建缓存 - 我认为这可以工作,但如果可能的话,我更喜欢更优雅的解决方案! - RB.
这个库是否有API可以迭代缓存中现有的对象?如果有的话,您可能可以让所有站点触发一些代码,仅在上次刷新时间超过X分钟时才刷新该项。 - Shamit Verma
我认为我们可以做类似的事情,但是EL缓存已经有非常复杂的过期策略(滑动时间、绝对时间、基于文件等),所以我们在这里会重复造轮子。我们的目标是简化问题,而不是让它变得更加复杂!不过还是谢谢你的建议。 - RB.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接