我安装了 Membase 服务器并安装了几个存储桶,我正在寻找一个很好的教程或示例,说明如何将其用作 NHibernate 的二级缓存。
我对示例配置的外观感兴趣,以及是否需要在代码中做任何事情,或者我是否可以从我的 NHibernate 映射中处理所有这些。
感谢您的任何帮助。
我安装了 Membase 服务器并安装了几个存储桶,我正在寻找一个很好的教程或示例,说明如何将其用作 NHibernate 的二级缓存。
我对示例配置的外观感兴趣,以及是否需要在代码中做任何事情,或者我是否可以从我的 NHibernate 映射中处理所有这些。
感谢您的任何帮助。
在您的映射文件中,您需要包含以下属性:
<class name="ClassName" table="Table">
<cache usage="read-write" />
<!-- SNIP -->
</class>
选项是 read-write(读提交隔离)、nonstrict-read-write(很少被写入的对象、更好的性能但增加过时数据的机会)或 read-only(永远不会更改的数据)。
然后,在您的网络(或应用程序)配置中,您需要一个部分来配置 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 手动设置某些属性。