La mise en cache de la mémoire (souvent appelée simplement mise en cache) est une technique dans laquelle les applications informatiques stockent temporairement des données dans la mémoire principale d’un ordinateur (c’est-à-dire la mémoire vive ou la RAM) pour permettre une récupération rapide de ces données. La RAM utilisée pour le stockage temporaire est connue sous le nom de cache. Étant donné que l’accès à la RAM est nettement plus rapide que l’accès à d’autres supports tels que les disques durs ou les réseaux, la mise en cache aide les applications à fonctionner plus rapidement grâce à un accès plus rapide aux données. La mise en cache est particulièrement efficace lorsque l’application présente un modèle commun dans lequel elle accède à plusieurs reprises aux données précédemment consultées. La mise en cache est également utile pour stocker des calculs de données qui prennent du temps à calculer. En stockant les calculs dans un cache, le système économise du temps en évitant la répétition du calcul.
Comment Fonctionne la mise en cache de la mémoire?
La mise en cache de la mémoire fonctionne en mettant d’abord de côté une partie de la RAM à utiliser comme cache. Lorsqu’une application essaie de lire des données, généralement à partir d’un système de stockage de données comme une base de données, elle vérifie si l’enregistrement souhaité existe déjà dans le cache. Si c’est le cas, l’application lira les données du cache, éliminant ainsi l’accès plus lent à la base de données. Si l’enregistrement souhaité n’est pas dans le cache, l’application lit l’enregistrement à partir de la source. Lorsqu’elle récupère ces données, elle les écrit également dans le cache afin que, lorsque l’application aura besoin de ces mêmes données à l’avenir, elle puisse les extraire rapidement du cache.
Étant donné que la taille du cache est limitée, certaines données déjà dans le cache devront éventuellement être supprimées pour laisser la place aux nouvelles données auxquelles l’application a accédé le plus récemment. Cela signifie que le système de mise en cache a besoin d’une stratégie sur laquelle les enregistrements doivent être supprimés pour faire de la place. La stratégie dépendra de la nature des accès aux données de l’application et tentera généralement de supprimer les enregistrements qui ne devraient pas être consultés de nouveau prochainement. Par exemple, une stratégie la moins récemment utilisée (LRU) supprimera l’enregistrement dont le dernier accès était avant tout autre enregistrement dans le cache. L’hypothèse ici est que s’il y a longtemps que l’enregistrement n’a pas été consulté, il ne le sera probablement plus bientôt. Ou pour le dire autrement, les enregistrements les plus utilisés récemment seront probablement réutilisés bientôt. Une stratégie la moins fréquemment utilisée (LFU) consiste à suivre le nombre d’accès de chaque enregistrement dans le cache et à supprimer l’enregistrement avec le moins d’accès. L’hypothèse ici est qu’un enregistrement rarement utilisé ne sera probablement plus utilisé bientôt.
Le défi avec les caches est de savoir comment minimiser les « manques de cache », c’est-à-dire, tentatives de lecture par l’application pour les enregistrements qui ne sont pas dans le cache. Si vous avez trop de ratés, l’efficacité de votre cache diminue. Une application qui ne lit que de nouvelles données ne bénéficierait pas d’un cache et, en fait, présenterait des performances inférieures en raison du travail supplémentaire de vérification du cache sans y trouver l’enregistrement souhaité. Une façon d’atténuer ce défi consiste à tirer parti de caches plus importants. Ce n’est souvent pas pratique sur un seul ordinateur, c’est pourquoi les caches distribués sont des choix populaires pour accélérer les applications qui ont besoin d’accéder à des ensembles de données plus volumineux. Un cache distribué regroupe la RAM de plusieurs ordinateurs connectés dans un cluster afin que vous puissiez créer un cache plus grand qui peut continuer à croître en ajoutant plus d’ordinateurs au cluster. Des technologies telles que Hazelcast IMDG peuvent être utilisées comme un cluster distribué pour accélérer les applications à grande échelle.
Un autre défi des caches est le risque de lire des données « périmées », dans lesquelles les données du cache ne reflètent pas les dernières données de la source sous-jacente. Souvent, ce risque est un compromis acceptable pour la performance de l’application. Dans les cas où ce n’est pas le cas, il appartient à l’application qui met à jour la source de données sous-jacente de mettre à jour l’enregistrement en question dans le cache.
Exemples de cas d’utilisation
Un cas d’utilisation général pour la mise en cache de la mémoire consiste à accélérer les applications de base de données, en particulier celles qui effectuent de nombreuses lectures de base de données. En remplaçant une partie des lectures de base de données par des lectures à partir du cache, les applications peuvent supprimer la latence résultant des accès fréquents à la base de données. Ce cas d’utilisation se trouve généralement dans des environnements où un volume élevé d’accès aux données est visible, comme dans un site Web à fort trafic qui présente du contenu dynamique à partir d’une base de données.
Un autre cas d’utilisation implique une accélération de requête, dans laquelle les résultats d’une requête complexe vers une base de données sont stockés dans le cache. Les requêtes complexes exécutant des opérations telles que le regroupement et l’ordre peuvent prendre beaucoup de temps à terminer. Si les requêtes sont exécutées à plusieurs reprises, comme c’est le cas dans un tableau de bord de business intelligence (BI) auquel de nombreux utilisateurs accèdent, le stockage des résultats dans un cache permettrait une plus grande réactivité dans ces tableaux de bord.
Sujets connexes
Cache JCache/Java
Cache Miss
Cache de Deuxième niveau Hibernate
Lectures supplémentaires
Cas d’utilisation de la Mise en cache
Mise en cache de base de données
Hazelcast Cloud
Mise en cache Bootiful : Cache de printemps + Hazelcast