Gestion de la mémoire dans Redis
Redis est la base de données de choix pour sauvegarder les systèmes de cache. Il utilise un modèle de gestion de la mémoire qui prend en charge des algorithmes les moins récemment utilisés (LRU) et autres pour expulser les clés afin d'autoriser de nouvelles données lorsque la mémoire est saturée.
Le HCL Cache a des exigences qui vont au-delà d'une base de données clé-valeur simple. Pour prendre en charge ces exigences, telles que l'invalidation par dépendance, le cache doit gérer des ensembles de métadonnées pour chaque clé. Redis ne doit pas être autorisé à expulser les informations de métadonnées, car cela crée des incohérences dans le cache, telles que les entrées qui ne sont pas invalidées. Pour gérer les métadonnées, le HCL Cache implémente un ensemble de processus de maintenance.
Configurations de mémoire Redis
- maxmemory
- Quantité de mémoire mise à disposition pour les clés (données mises en cache).
- maxmemory-policy
- Doit être défini sur volatile-lru, ce qui supprime les clés les moins récemment utilisées avec la zone d'expiration définie sur true.
Avec Redis Enterprise, maxmemory n'est pas utilisé. Les caches sont alors conservés à l'aide du nombre d'entrées. Voir softMaxSize.
Objets HCL Cache dans Redis
| Objet | Utilisation | Ensemble d'expirations |
|---|---|---|
{}-data-* |
Clé HASH qui contient les données mises en cache et des métadonnées supplémentaires, telles que l'heure de création, les dépendances et autres | OUI |
{}-dep-* |
Clé SET pour chaque ID de dépendance. L'ensemble contient une liste de tous les ID de cache associés à cet ID de dépendance. | NO |
{}-maintenance |
ZSET par heure d'expiration contenant les clés de cache et leurs dépendances | NO |
{}-inactive |
ZSET par heure de création utilisée pour la maintenance de l'inactivité (9.1.10+) | NO |
Les données mises en cache ({}-data-) doivent toujours avoir un jeu d'expiration et peuvent être expulsées par Redis lorsque la mémoire disponible est épuisée. Les informations de métadonnées ({}-dep-,-maintenance,-inactive) n'ont pas d'expiration et ne peuvent donc pas être expulsées par Redis. Elles doivent être gérées par les processus de maintenance HCL Cache.
Processus de maintenance HCL Cache
Pour gérer les métadonnées, HCL Cache implémente les processus de maintenance suivants. Pour plus de détails, voir : Maintenance du cache.
- Maintenance arrivée à expiration
- Lorsqu'une clé expire, Redis la supprime automatiquement de la mémoire. Le travail de maintenance arrivé à expiration est chargé de supprimer les références des métadonnées à la clé arrivée à expiration.
- Low-memorymaintenance
- Lorsque la mémoire utilisée atteint 100 % de
maxmemory, Redis commence à évincer les clés. Les tests ont montré que des conditions de mémoire pleine peuvent entraîner des erreurs telles que "commande non autorisée en cas de mémoire utilisée > 'maxmemory'". Pour éviter cette situation, HCL Cache surveille l'utilisation de la mémoire et déclenche des travaux pour réduire la taille de chaque cache, avant que la mémoire disponible ne soit épuisée. Les travaux suppriment les entrées de cache et leurs métadonnées associées. Les entrées de cache sélectionnées pour la suppression sont celles qui expirent plus tôt.
- Maintenance inactive
- Ce travail n'est pas requis pour la maintenance de la mémoire, mais permet de réduire les besoins en mémoire en supprimant les entrées de cache inactives. Sa conception est très similaire à celle de la maintenance expirée, excepté dans le cas des entrées de cache qui n'ont pas encore expiré.