2011-04-19 57 views
10

我有一個安裝了幾個桶設置的Membase服務器,我正在尋找一個很好的教程或如何使用它作爲第二級緩存與NHibernate的例子。NHibernate和Memcached - 教程/例子

我對示例配置的樣子感興趣,如果我在代碼中需要做什麼,或者如果我可以從我的NHibernate映射中處理它,我感興趣。

感謝您的任何幫助。

回答

14

在你的映射文件,則需要包括屬性:

<class name="ClassName" table="Table"> 
    <cache usage="read-write" /> 
    <!-- SNIP --> 
</class> 

選項包括讀寫(讀取已提交隔離),非嚴格讀寫(即很少寫的對象,更好的性能,但增加陳舊數據的機會)或只讀(永不改變的數據)。

然後,在您的網頁(或應用)的配置,你需要一個部分配置的memcached:

<configuration> 
    <configSections> 
    <!-- SNIP --> 
    <section name="memcache" type="NHibernate.Caches.MemCache.MemCacheSectionHandler,NHibernate.Caches.MemCache" /> 
    </configSections> 
    <memcache> 
    <memcached host="127.0.0.1" port="11211" weight="2" /> 
    </memcache> 
    <!-- SNIP --> 
</configuration> 

最後,在你的會話工廠配置一定要使用:

<hibernate-configuration> 
    <session-factory> 
     <!-- SNIP --> 

     <property name="expiration">300</property> <!--memcache uses seconds --> 
     <property name="cache.provider_class">NHibernate.Caches.MemCache.MemCacheProvider,NHibernate.Caches.MemCache</property> 
     <property name="cache.use_second_level_cache">true</property> 
     <property name="cache.use_query_cache">false</property> <!-- true if you want to cache query results --> 
    </session-factory> 
    </hibernate-configuration> 

當然您將需要下載並引用適當版本的NHibernate.Caches的dll以獲得正確的緩存提供程序。 memcached也依賴於ICSharpCode.SharpZipLib和Memcached.ClientLibrary(下載中包含s/b)

如果您使用流暢的NHibernate,會話的安裝鏈中有一個.Cache方法工廠,你可以使用,雖然有些屬性需要通過調用.ExposeConfiguration手動設置。

+0

我發現這個例子不完整。首先,您必須在某處安裝Memcached服務器(如果您想在Windows上作爲服務安裝,請參閱http://xrigher.info/php/how-to-install-memcache-on-windows上的部分說明-7-x64的與-瓦帕/)。當添加Memcached客戶端二進制文件時,我發現3.2的二進制文件對log4net.dll有依賴性,所以我必須將其與Memcached客戶端二進制文件一起復制。另外,添加過期密鑰會在我的項目中生成錯誤 – Mario 2012-04-11 19:33:45