2010-08-17 10 views
1

Env: Spring 2.5.6, Hibernate 3.3.2, 2.0.1 Ehcache, terre cuite 3.2.1Ehcache cache éternel oublier articles

J'ai un cache sur une classe abstraite (avec 5 héritières)

<cache name="com.f4.owl.domain.good.GoodType" 
     maxElementsInMemory="15000" 
     eternal="false" 
     timeToIdleSeconds="0" 
     timeToLiveSeconds="0" 
     overflowToDisk="false"> 
    <terracotta/> 
</cache> 

J'ai aussi une page qui charge 6550 éléments. Au début, le cache semble fonctionner (les éléments sont récupérés du cache et la page se charge beaucoup plus vite) mais après un certain temps (de quelques minutes à quelques heures), il recharge tout depuis la base de données. En utilisant la console développeur en terre cuite, il semble vraiment que le cache se vide de 6550 à environ 70 éléments. D'après ce que je comprends, mettre à la fois timeToIdleSeconds et timeToLiveSeconds à zéro devrait rendre le cache éternel et ne devrait donc jamais rétrécir. Quelqu'un peut-il nous éclairer à ce sujet?

Répondre

1

finalement cloué.

il a été provoqué par une requête sql (sur une table totalement indépendante) sans table synchronisée explicite, provoquant ainsi le vidage du cache complet.

explications ici: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2224

la solution est de mettre la table pour tous les synchronisent requêtes SQL non définies dans readonly un fichier de mappage.

<sql-query name="queryname"> 
<synchronize table="tablename"/> 
... 
</sql-query>