Cache de méthode : Spring Cache vs Ehcache-Spring-Annotations

A quoi sert le cache de méthode alors que vous avez peut être déjà un cache de 2ème niveau dans Hibernate?

  • à cacher ce qui ne vient pas d’Hibernate (webservices, JDBC, LDAP…)
  • à cacher des données coûteuses à calculer (agrégations, statistiques…)
  • à cacher des données que vous ne voulez pas gérer dans le cache de 2ème niveau

Dans la future version 3.1 (dont la M1 est déjà disponible) à sortir, Spring intègrera une solution de caching de méthode.
Cette fonctionnalité va rentrer en concurrence avec un petit framework cher à mon coeur: ehcache-spring-annotations.

Tous 2 sont issus du défunt spring-modules-cache (développé par Costin Leau, également à l’origine de cette nouvelle brique officielle Spring), ils sont donc très similaires. En voici un comparatif succinct :

Spring Cache Ehcache Spring Annotations
API de cache supportées En théorie, toutes, l’API s’appuyant sur une couche d’abstraction de cache. En pratique, seules les implémentations pour ConcurrentMap et Ehcache sont fournies. Uniquement Ehcache
Prise en compte de la méthode dans le calcul de la clé pas dans l’implémentation par défaut (qui est la seule fournie) oui, avec possibilité de l’exclure
Caching conditionnel oui avec SpEL non
Eviction des entrées expirées non oui avec un élément de namespace qui configure un cron
Eviction avant/après l’appel de la méthode non oui avec l’attribut when sur @TriggersRemove
Sélection fine des paramètres à prendre en compte pour le calcul de la clé oui avec SpEL oui avec @PartialCacheKey
KeyGenerators founis DefaultKeyGenerator: combinaison des hashcodes des paramètres HashCodeCacheKeyGenerator: combinaison des hashcodes de la méthode et de ses paramètres, avec possibilité de calcul récursif par réflexion sur le contenu des paramètres

StringCacheKeyGenerator: StringBuilder

MessageDigestCacheKeyGenerator: digest (par défaut SHA1) au lieu de hashcode
Support de SelfPopulatingCache non oui avec l’attribut selfPopulating sur @Cacheable

En conclusion, cette nouvelle fonctionnalité de Spring a, à mon sens, encore du chemin à faire (certes, on n’est est qu’à la M1).
L’intérêt de la couche d’indirection me semble relativement théorique, la plupart des projets utilisant Ehcache.
En l’état, je resterai donc pour l’instant fidèle à Ehcache Spring Annotations! :)

VN:R_U [1.9.22_1171]
Rating: +1 (from 1 vote)
Share
Ce contenu a été publié dans Spring, avec comme mot(s)-clef(s) , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire