Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 从单个web服务器移动到多个web服务器负载平衡环境时的Nhibernate二级缓存问题_Asp.net Mvc_Nhibernate_Fluent Nhibernate_Load Balancing_Second Level Cache - Fatal编程技术网

Asp.net mvc 从单个web服务器移动到多个web服务器负载平衡环境时的Nhibernate二级缓存问题

Asp.net mvc 从单个web服务器移动到多个web服务器负载平衡环境时的Nhibernate二级缓存问题,asp.net-mvc,nhibernate,fluent-nhibernate,load-balancing,second-level-cache,Asp.net Mvc,Nhibernate,Fluent Nhibernate,Load Balancing,Second Level Cache,我以前的设置是一个web服务器和一个数据库服务器。我使用nhibernate二级缓存来缓存东西,以避免大量调用数据库。这在我使用这个组件时效果非常好 nhibernate.caches.syscache 并添加了以下代码以启用二级缓存(使用常规syscache提供程序): 返回配置 .Mappings(m=>m.FluentMappings.AddFromAssemblyOf().Conventions.Add(typeof(Conventions))) .曝光配置( c=>{ c、 SetP

我以前的设置是一个web服务器和一个数据库服务器。我使用nhibernate二级缓存来缓存东西,以避免大量调用数据库。这在我使用这个组件时效果非常好

nhibernate.caches.syscache
并添加了以下代码以启用二级缓存(使用常规syscache提供程序):

返回配置
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf().Conventions.Add(typeof(Conventions)))
.曝光配置(
c=>{
c、 SetProperty(“proxyfactory.factory\u类”,proxyfactory);
c、 SetProperty(“cache.provider_class”,“NHibernate.Caches.SysCache.SysCacheProvider,NHibernate.Caches.SysCache”);
c、 SetProperty(“缓存。使用二级缓存”,“true”);
c、 SetProperty(“cache.use_query_cache”,“true”);
c、 SetProperty(“到期日”、“86400”);
})
.BuildSessionFactory();
我现在已经迁移到一个有多个Web服务器的新环境中,我正在尝试理解这一点的含义(我仍然只有一个db服务器)

由于缓存以前存储在Web服务器上,现在似乎每个Web服务器上都有2个并行缓存,它们本身可能不同步,并可能导致过期更新等


要获得我以前使用过的缓存的好处,同时还要利用此新设置提供的web服务器负载平衡的弹性,最好的解决方案是什么?

Ayende关于NHibernate中二级缓存的使用情况。您将需要在web场场景中使用分布式缓存。例如SysCache2(它依赖于ASP.NET缓存,并且可以配置为使用分布式提供程序)或MemCache。这里演示了如何配置memcached。

我使用了memcached,它就像一个魔咒。您可能需要调整缓存的大小,但除此之外,它没有任何麻烦。
在每个Web服务器节点上设置一个memached节点,并在添加节点时保持该配置

感谢这些链接,因为它们是很棒的文章。我还有几个问题。1.这个缓存应该在哪里运行(在一个web服务器上,或者我现在需要另一个服务器来进行这个缓存)。如果它必须是另一台机器,鉴于我现在需要一个网络跃点才能到达缓存,这不是会更慢吗?@ooo,理想情况下,它应该是另一台内存丰富的机器。您也可以使用web服务器,但通常不建议这样做。有一个额外的网络跃点来访问缓存(而不是在同一台机器上)有什么意义呢。另外,新机器是否应该专门用作缓存机器。@哦,事实上,与将其存储在相同的服务器上相比,额外的网络跃点可能会稍微慢一点。但要记住,如果将实际的web服务器用于缓存,会消耗多少内存,以及由此导致的实际应用程序的速度缓慢,这种额外的网络跳跃就像光速一样。所以,是的,当您使用分布式时,绝对要使用单独的缓存服务器。如果是出于财务原因,您可以从相同的服务器开始,但您应该考虑在一天之内卸载缓存。您知道每个提供商是否有任何良好的比较(易于安装、性能等)
       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();