我们有大约 50 个网站,在不同的应用程序池中运行,它们从一个公共(public)缓存数据库(使用 Microsoft Enterprise Library Caching 应用程序 block )读取数据。
我们目前有一个控制台应用程序,每天凌晨 3 点填充缓存。但是,我们想要摆脱这个应用程序并让缓存自动刷新过期的项目,使用 ICacheItemRefreshAction 接口(interface)。
我们打算在 50 个网站的每个网站的 Global.asax 中创建我们的缓存对象。但是,我担心的是,如果我们在 Global.asax 中设置缓存过期策略,那么 50 个网站中的每一个都会触发刷新操作,从而导致数据被重新缓存 50 次。
我们不希望只有 1 个网站设置过期策略,因为这样其他 49 个网站将依赖于这 1 个网站,这是一种架构禁忌。
鉴于这些限制 - 有什么建议吗?
最佳答案
坚持你所拥有的。
如果控制台应用程序在凌晨 3 点填充缓存的性能可以接受,请继续使用它。如果您需要更频繁/更不频繁地刷新缓存,您可以随时更改调用它的粒度。
如果您希望 ICacheItemRefreshAction 有机会启用更精细的粒度(即一些项目在 24 分钟后从缓存中掉出,一些在 24 小时后掉出缓存),那么请考虑让控制台应用程序更灵活,以便它可以被告知缓存的哪些部分缓存失效并重新填充。
您的问题中遗漏的一点有助于完善答案的信息是您为什么要摆脱控制台应用程序,也许更重要的是,为什么您想转而使用 ICacheItemRefreshAction
界面吗?
关于asp.net - 在多个网站之间共享缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5274703/