Maison  >  Article  >  base de données  >  La clé Redis existe-t-elle toujours après son expiration ?

La clé Redis existe-t-elle toujours après son expiration ?

(*-*)浩
(*-*)浩original
2019-11-23 09:50:457180parcourir

Récemment, nous avons découvert un problème intéressant dans le cluster Redis. Après avoir passé beaucoup de temps au débogage et aux tests, nous avons pu réduire l'utilisation de la mémoire Redis de 25 % dans certains clusters en modifiant l'expiration des clés.

La clé Redis existe-t-elle toujours après son expiration ?

Twitter exécute plusieurs services de mise en cache en interne. L'un d'eux est implémenté par Redis. Notre cluster Redis stocke certaines données importantes sur les cas d'utilisation de Twitter, telles que les données d'impression et d'engagement, le nombre de dépenses publicitaires et les messages directs.

L'historique du problème (Apprentissage recommandé : Tutoriel vidéo Redis )

Dès 2016, l'équipe Cache de Twitter a réalisé le architecture du cluster Redis Beaucoup de mises à jour. Quelques modifications ont été apportées à Redis, notamment une mise à jour de Redis version 2.4 vers la version 3.2.

Après cette mise à jour, plusieurs problèmes sont apparus, tels que le fait que les utilisateurs ont commencé à constater une utilisation de la mémoire incompatible avec ce qu'ils attendaient ou s'apprêtaient à utiliser, une latence accrue et des problèmes d'effacement des clés. L'autorisation de clé est un gros problème, qui peut entraîner la suppression des données qui doivent être conservées, ou la demande peut être envoyée au stockage d'origine des données.

Enquête préliminaire

L'équipe concernée et l'équipe de la cache ont entamé une enquête préliminaire. Nous constatons une latence accrue liée à l'effacement des clés en cours. Lorsque Redis reçoit une demande d'écriture mais ne dispose pas de la mémoire nécessaire pour conserver l'écriture, il arrête ce qu'il fait, efface la clé puis enregistre la nouvelle clé.

Cependant, nous devons encore découvrir la cause de ces augmentations de l'utilisation de la mémoire nouvellement effacée.

Nous soupçonnons que la mémoire est pleine de clés expirées mais pas encore supprimées. Certaines personnes suggèrent d'utiliser la numérisation. La méthode de numérisation lira toutes les clés et supprimera les clés expirées.

Dans Redis, les clés ont deux méthodes d'expiration, l'expiration active et l'expiration passive. L'analyse déclenchera l'expiration passive de la clé Lorsque la clé est lue, le TTL sera vérifié. Si le TTL a expiré, le TTL sera supprimé et rien ne sera renvoyé.

L'expiration active des clés dans la version 3.2 est décrite dans la documentation Redis. L'expiration active d'une clé commence par une fonction appelée activeExpireCycle. Il s'exécute plusieurs fois par seconde sur une minuterie interne appelée cron.

Ce que fait la fonction activeExpireCycle, c'est parcourir chaque espace clé, rechercher un kry aléatoire avec un ensemble TTL, et si le seuil de pourcentage de kry expiré est atteint, répétez ce processus jusqu'à ce que le délai soit respecté.

Cette méthode d'analyse de tous les krys est efficace, et lorsque l'analyse est terminée, l'utilisation de la mémoire diminue également. Il semble que Redis n'expire plus efficacement les clés.

Cependant, la solution à cette époque était d'augmenter la taille du cluster et plus de matériel, afin que les clés soient davantage distribuées et qu'il y ait plus de mémoire disponible. C'est décevant car le projet de mise à niveau de Redis mentionné précédemment réduit la taille et le coût d'exploitation de ces clusters en les rendant plus efficaces.

Pour plus d'articles techniques liés à Redis, veuillez visiter la colonne

Introduction au didacticiel d'utilisation de la base de données Redis pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn