2010-01-07 2 views
2

Я был в этом несколько дней. Я сконфигурировал мой конфигуратор web/app, чтобы использовать кеш второго уровня с сервером Memcached и поставщиком из NHContrib. Я еще не получаю никаких исключений при тестировании. Я вижу, что он не использует кеш для моих запросов, которые я установил cacheable = true. Если я переключу провайдера на NHibernate.Cache.HashtableCacheProvider и протестируйте его, как ожидается.Поставщик Memcached для NHibernate не работает

здесь соответствующие разделы конфигурации Я использую

<configuration> 
    <configSections> 
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler,NHibernate" /> 
    <section name="memcache" type="NHibernate.Caches.MemCache.MemCacheSectionHandler,NHibernate.Caches.MemCache" /> 
    </configSections> 
    <memcache> 
    <memcached host="192.168.215.60" port="11211" /> 
    </memcache> 

    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="connection.provider"> 
     NHibernate.Connection.DriverConnectionProvider 
     </property> 
     <property name="dialect"> 
     MT.Core.Persistence.Dialect, MT.Core 
     </property> 
     <property name="connection.driver_class"> 
     NHibernate.Driver.SqlClientDriver 
     </property> 
     <property name="connection.connection_string"> 
     Server=192.168.1.1;Initial Catalog=Test;User ID=TestUser;Password=fakepassword; 
     </property> 
     <property name="show_sql">true</property> 
     <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu</property> 
     <property name="cache.provider_class">NHibernate.Caches.MemCache.MemCacheProvider,NHibernate.Caches.MemCache</property> 
     <!--<property name="cache.provider_class">NHibernate.Cache.HashtableCacheProvider</property>--> 
     <property name="cache.use_second_level_cache">true</property> 
     <property name="cache.use_query_cache">true</property> 
    </session-factory> 

    </hibernate-configuration> 
</configuration> 

ответ

0

Я думаю, что свойство истечения следует установить для кэша памяти поставщика на уровне сеанса заводского, а не на конфигурации поставщика, как другие (SysCache)

<property name="expiration">300</property> 
+0

есть свойство под фабрикой сеансов для cache.default_expiration, но добавление этого не приводит к работе кеша. Я все еще вижу два запроса к базе данных в тесте, где я должен его увидеть. – CountCet

+0

У вас есть попытка истечения срока действия, потому что я использую memcache, и он работает для меня. – MatthieuGD

+0

yes inside Я добавил, что точное свойство и оно выбрасывает и исключает. Я нахожусь на Nhibernate 2.1.2 – CountCet

2

Проблема закончилась тем, что связана с проблемой подключения. Я использовал log4net для регистрации ошибок на консоли и в журнале приложений. Тогда я наконец увидел ошибки, связанные с подключением к серверу memcached. Как только код был продвинут на сервер в том же месте, ошибки исчезли. Я должен был научиться использовать log4net много лет назад.

2

Для memcache свойство «default_expiration» не «expiration». Я не уверен в SysCache. Но я использовал это свойство для memcache, и это работает для меня.

Первоначально я также столкнулся с той же ошибкой, о которой упомянул CountCet. Атрибут «expiration» не распознается поставщиком MemCache. Позже я проверил код и обнаружил, что он использует свойство default_expiration, а его значение по умолчанию - 300 секунд.

Смежные вопросы