8

我以前的設置是單個Web服務器和單個數據庫服務器。我使用nhibernate二級緩存來緩存東西,以避免大量調用數據庫。這和偉大的工作,因爲我是用這本彙編從單個Web服務器移動到多個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服務器上,那麼現在它似乎像我有每個網絡服務器,其本身可能不同步,可能會導致過時的更新等

2個並行高速緩衝存儲器什麼是獲得我之前緩存的好處的最佳解決方案,同時還要利用此新安裝程序提供的Web服務器負載平衡的彈性?

回答

8

Ayende blogged關於NHibernate中二級緩存的使用。您將需要在Web場景中使用分佈式緩存。例如SysCache2(依賴於ASP.NET緩存,可以配置爲使用分佈式提供程序)或MemCache。這裏的an article說明了如何配置memcached。

+0

感謝您的鏈接,因爲它們是優秀的文章。我仍然有幾個問題。 1.這個緩存在哪裏運行(在一個Web服務器上,還是我現在需要另一個服務器來進行緩存)。如果它必須是另一臺機器,考慮到現在我需要一個網絡跳到達緩存,這不會變得更慢嗎? – leora

+0

@ooo,理想情況下它應該是另一臺有很多內存的機器。你也可以使用你的網絡服務器,但一般不推薦。 –

+0

關於有一個額外的網絡跳進入緩存(與在同一臺機器上)有什麼關係。另外,如果這臺新機器只是致力於成爲一臺緩存機器。 – leora

1

嗯,我已經使用memcached,它的作品就像一個魅力。你可能不得不調整緩存的大小,但除此之外它沒有問題。 在每個web服務器節點上設置一個memached節點,並在添加節點時維護該配置