我安装了几个桶设置的Membase服务器,我正在寻找一个很好的教程或如何使用它作为NHibernate的二级缓存的示例。
我对示例配置的样子以及代码中是否需要执行任何操作感兴趣,或者是否可以从我的NHibernate映射中处理所有内容。
感谢您的帮助。
答案 0 :(得分: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手动设置。