Mettre en cache un objet signifie qu'on espère le réutiliser à court ou moyen terme en s'épargnant le coût de sa reconstruction. Nous allons voir dans cet article une solution au demeurant louable visant à élaborer une stratégie d'éviction qui s'avère désastreuse : surtout, ne l'utilisez pas en production !
Principe et stratégie
Utiliser un cache est monnaie courante dans une application. Un cache permet de stocker en mémoire un objet susceptible d'être réutilisé, ce qui apporte son lot d'inconvénients : si on veut un cache efficace, il faut stocker suffisamment d'objets, mais si on stocke trop d'objets, on risque de saturer la mémoire. Le gain escompté doit être à la hauteur des sacrifices consentis en terme de volume de mémoire alloué mais aussi en terme de gestion du cache (l'objet mis en cache n'est-il pas périmé ? quelle clé utiliser pour le retrouver ? etc).
Toute la question réside dans l'adoption d'une sorte de compromis entre la taille du cache, la durée de rétention des objets, et dans l'application d'une politique d'éviction.
Parmi les stratégies les plus conventionnelles, on peut fixer une durée de rétention sur les objets, ou fixer un nombre maximum d'objets, ou de taille des objets à stocker, en supprimant les plus anciens une fois le quota atteint. Simple mais très souvent efficace. Google Guava est une librairie Java assez complète qui offre ce type de fonctionnalités, et permet également d'être notifié des entrées supprimées du cache.
Toute la question réside dans l'adoption d'une sorte de compromis entre la taille du cache, la durée de rétention des objets, et dans l'application d'une politique d'éviction.
Cache-sexe utilisé jadis dans l'île de Java - Peut contenir un nombre limité d'objets - |