我的以前的设置是一个Web服务器和一个数据库服务器。我使用了nhibernate第二级缓存来缓存一些东西,以避免大量的调用到数据库。这个方法一直很好用,因为我使用了这个程序集。
nhibernate.caches.syscache
我添加了以下代码,以启用第二级缓存(使用常规syscache提供程序):
return configuration
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ApplicationMap>().Conventions.Add(typeof(Conventions)))
.ExposeConfiguration(
c => {
c.SetProperty("proxyfactory.factory_class", proxyFactory);
c.SetProperty("cache.provider_class", "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache");
c.SetProperty("cache.use_second_level_cache", "true");
c.SetProperty("cache.use_query_cache", "true");
c.SetProperty("expiration", "86400");
})
.BuildSessionFactory();
我现在已经迁移到一个拥有多个web服务器的新环境中,正在尝试理解这样做的影响(我仍然只有一个数据库服务器)。
由于缓存之前是存储在web服务器上的,现在似乎每个web服务器上都有2个并行的缓存,它们本身可能不同步,可能会导致过时的更新等问题。
如何最好地解决之前所拥有的缓存的好处,同时又利用提供了这种新设置的web服务器负载平衡的弹性?