我们有大约50个网站,运行在不同的应用程序池中,它们从一个通用的缓存数据库中读取数据(使用Microsoft Enterprise Library缓存应用程序块)。
我们目前有一个控制台应用程序,它在每天凌晨3点填充缓存。但是,我们希望摆脱此应用程序,并使用ICacheItemRefreshAction接口让缓存自动刷新过期项目。
我们打算在50个网站的Global.asax中创建缓存对象。然而,我担心的是,如果我们在Global.asax中设置缓存过期策略,50个网站中的每个网站都会触发刷新操作,导致数据被重新缓存50次。
我们不希望只有一个网站设置过期策略,因为这样其他49个网站就会依赖于这一个网站,这是架构上的禁忌。
考虑到这些限制-有什么建议吗?
发布于 2011-03-11 23:44:01
坚持你所拥有的。
如果在凌晨3点填充缓存的控制台应用程序的性能可以接受,请继续使用它。如果您需要更频繁/更少地刷新缓存,则可以随时更改调用它的粒度。
如果您想碰巧使用ICacheItemRefreshAction来实现更精细的粒度(例如,一些项目在24分钟后从缓存中掉出,一些项目在24小时后丢失),那么可以考虑让控制台应用程序更灵活,这样它就可以被告知缓存的哪些部分无效并重新填充。
你的问题中缺少的一点信息对完善答案很有用,那就是为什么你想要摆脱控制台应用程序,也许更重要的是,你为什么想要使用 ICacheItemRefreshAction 界面?
发布于 2011-03-11 23:42:58
也许你可以考虑一种替代的缓存解决方案,比如memcached、NCache或Velocity。
有了这个,你就可以拥有一个被所有站点共享的缓存。
https://stackoverflow.com/questions/5274703
复制相似问题