eCandidat (esup-opi)

Arborescence des pages

Vous regardez une version antérieure (v. /wiki/spaces/PROJESUPOPI/pages/194248728/6.1.+Gestion+du+cache) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 6) afficher la version suivante »

Objectif

La gestion du cache a pour objectif d'améliorer les performances au sein de l'application sans contraintes sur le développement.

Ainsi, on peut stocker en mémoire certains appels méthodes dans une map de données.

Dans l'application, on utilise 2 façons d'utiliser le cache :

  • les annotations Spring
  • l'utilisation ad hoc du cache via ehcache

Ces 2 méthodes se basent sur un stockage en mémoire défini par un bean cacheManager.

Déclaration Spring du cacheManager

Définition du bean cacheManager

Voici la définition du bean cacheManager :

<bean id="cacheManager"
    scope="singleton"
    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <description>
        This bean is used to configure EhCache.
    </description>
    <property name="configLocation" value="classpath:/properties/cache/ehcache.xml" />
</bean>

La seule chose à lui définir est l'emplacement de la configuration définissant l'ensemble des caches.

Définition du ehcache

Le fichier ehcache.xml définit l'ensemble des caches utilisé dans l'application.

On définit le cache de la manière suivante :

<cache name="org.esupportail.commons.services.ldap.CachingLdapServiceImpl"
    maxElementsInMemory="100" eternal="false" timeToIdleSeconds="300"
    timeToLiveSeconds="600" overflowToDisk="true" />

On déclare alors :

  • name : le nom du cache (qui peut être le nom de la classe ciblée)
  • maxElementsInMemory : le nombre maximum d'éléments cachable en mémoire
  • eternal : définit si le cache se purge ou non
  • timeToIdleSecond : le nombre maximum de secondes d'un élément durant lequel il peut exister dans la mémoire cache sans être consulté.
  • timeToLiveSeconds : le nombre maximum de secondes d'un élément durant lequel il peut exister dans le cache indépendamment de leur utilisation.
  • overflowToDisk : définit si lorsqu'on atteint le maxElementsInMemory, on écrit les données sur le disque

De plus, on définit l'espace de stockage disque dans le cas de gestion de cache avec overflowToDisk à true :

<diskStore path="/tmp/opiR1/cache" />

Enfin, on va définir un cache par défaut dans lequel on stocke les données non définis par les précédents cache :

<defaultCache maxElementsInMemory="10000" eternal="false"
    timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
    diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
    memoryStoreEvictionPolicy="LRU" />

Gestion du cache par annotation Spring

Fonctionnement

Le cache est géré par annotation. Il suffit donc d'annoter une méthode pour quelle soit gérée par le cache.

Exemples :

Mise en cache du traitement.

@Cacheable(modelId = CacheModelConst.ACCESS_RIGHT_DEFAULT)
public Traitement getTraitement(final Integer id) {
	if (log.isDebugEnabled()) {
		log.debug("entering getTraitement( " + id + " )");
	}
	return daoService.getTraitement(id);
}

On vide le cache lors d'un ajout d'un traitement.

@CacheFlush(modelId = CacheModelConst.ACCESS_RIGHT_DEFAULT)
public void addTraitement(final Traitement traitement) {
	if (log.isDebugEnabled()) {
		log.debug("entering addTraitement( " + traitement + " )");
	}
	daoService.addTraitement(traitement);
	//flush the other instance
	executeFlushCache(CacheModelConst.ACCESS_RIGHT_DEFAULT, "addTraitement");
}

Déclaration Spring

Gestion du cache avec ehcache

  • Aucune étiquette