NHibernate и Memcached - учебник/пример

У меня есть сервер Membase, установленный с настройкой нескольких ковшей, и я искал хороший учебник или пример того, как использовать его как кеш второго уровня с NHibernate.

Мне интересно, как будет выглядеть примерная конфигурация, и если что-то мне нужно сделать в коде, или я могу обработать все это из своих сопоставлений NHibernate.

Спасибо за любую помощь.

Ответ 1

В ваших файлах сопоставления вам нужно будет включить свойство:

<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>

Наконец, в конфигурации сеанса factory обязательно используйте:

  <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>

Конечно, вам нужно загрузить и ссылаться на dll из соответствующей версии NHibernate.Caches, чтобы получить правильного поставщика кешей. Memcached принимает зависимость от ICSharpCode.SharpZipLib и Memcached.ClientLibrary также (s/b, включенный в загрузку)

Если вы используете беглый NHibernate, в цепочке настройки есть сеанс factory, который можно использовать, используя метод .Cache, хотя некоторые свойства необходимо установить вручную через вызов .ExposeConfiguration.