2015-08-14 3 views
0

Я использую Infinispan 6.0.0 с Hibernate 4.3.6.infinispan hibernate cache disiction

Моя конфигурация является:

<!-- Default configuration is appropriate for entity/collection caching. --> 
    <namedCache name="entity"> 
     <clustering mode="invalidation"> 
     <stateTransfer fetchInMemoryState="false" timeout="20000"/> 
     <sync replTimeout="20000"/> 
     </clustering> 
     <locking isolationLevel="READ_COMMITTED" concurrencyLevel="1000" 
       lockAcquisitionTimeout="15000" useLockStriping="false"/> 
     <!-- Eviction configuration. WakeupInterval defines how often the eviction thread runs, in milliseconds. 
      0 means the eviction thread will never run. A separate executor is used for eviction in each cache. --> 
     <eviction maxEntries="${infinispan.maxEntries:10000}" strategy="LRU"/> 
     <expiration maxIdle="${infinispan.maxIdle:-1}" wakeUpInterval="5000"/> 
     <!-- <transaction transactionMode="TRANSACTIONAL" autoCommit="false" 
        lockingMode="OPTIMISTIC"/> --> 
    </namedCache> 

Свойства системы не установлены, поэтому по умолчанию применяются (10,000, -1).

Как я понимаю, выселение никогда не должно происходить, когда maxEntries не достигнуто.

Для некоторых из моих сущностей записи кэша удаляются очень скоро после того, как они добавляются в кэш. Добавлением был просто запрос, который возвращает много этих объектов (< 1000). Эти объекты не изменяются тогда (поэтому не должно быть никаких признаков недействительности).

Итак, что вызывает бесконечность для удаления объектов из кеша?

Thank you

ответ

1

Да, Hibernate не знает, что обновляется в собственных запросах, если вы не explicitly provide that info, поэтому он очищает весь кеш второго уровня, чтобы предотвратить сохранение устаревших данных.

Сказать Hibernate, что родной запрос не влияет на какие-либо данные в кэш-памяти второго уровня:

SQLQuery sqlQuery = session.createSQLQuery(" ... "); 
sqlQuery.addSynchronizedQuerySpace(""); 
sqlQuery.executeUpdate(); 
0

OK; получил это ...

В Hibernate Query.executeUpdate() очищает связанный кэш объектов.

Другие ORM делают то же самое?

2

Я подозреваю, что проблема, которую вы испытываете, что предварительно Infinispan 7.2.x, выселение было сделано в сегмент, так что, если размер сегмента достигнет своего предела (что составляет малую величину maxEntries), тогда это будет удар по выселению. Проблема была решена в Infinispan 7.2.x, как описано here. Вы должны попробовать с Infinispan 7.2.x, который должен работать с Hibernate 4.3.

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