NHibernate和Memcached - 教程/示例

时间:2011-04-19 20:00:12

标签: c# .net nhibernate memcached membase

我安装了几个桶设置的Membase服务器,我正在寻找一个很好的教程或如何使用它作为NHibernate的二级缓存的示例。

我对示例配置的样子以及代码中是否需要执行任何操作感兴趣,或者是否可以从我的NHibernate映射中处理所有内容。

感谢您的帮助。

1 个答案:

答案 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手动设置。