Maison  >  Article  >  base de données  >  Politique de suppression et politique d'expulsion Redis

Politique de suppression et politique d'expulsion Redis

咔咔
咔咔original
2020-08-28 17:19:321561parcourir

Points de connaissances dans cet article Concept de données expirées Politique de suppression des données Algorithme d'expulsion

Avant-propos

Kaka a compilé une feuille de route pour créer un guide d'entretien et s'est préparé à écrire des articles selon cette feuille de route. Plus tard, j'ai découvert que j'ajoutais des points de connaissances qui n'étaient pas complétés. J'attends également avec impatience que vos partenaires se joignent à nous pour nous aider à apporter leur aide. Rendez-vous dans la section commentaires !

Politique de suppression et politique dexpulsion Redis
Insérer la description de l'image ici

Données expirées

Regardons d'abord les trois valeurs clés, à savoir le sexe, le nom et l'âge.

Les instructions pour définir ces trois valeurs sont set name kaka setex age 100 24 setex sex 10 1

Politique de suppression et politique dexpulsion RedisDans Redis, nous pouvons utiliser ttl pour obtenir l'état d'une certaine clé. Utilisons ttl pour obtenir le nom ci-dessus. respectivement. , âge, statut de sexe

peut voir trois valeurs, qui sont -1 775 -2

Alors quelle est l'information donnée par ces trois valeurs !

  • -1 représente des données valides en permanence
  • 775 Cette valeur est définie sur l'âge, et la commande utilisée est setex age 1000 24, qui est exprimée comme le reste temps de validité
  • -2 signifie données expirées, ou données supprimées, ou données définies Politique de suppression et politique dexpulsion Redis

Structure de stockage des données expirées

  • Lorsque nous définissons un nom sensible au temps, redis stocke C'est une adresse mémoire 0x10101
  • puis redis ouvrira un autre espace pour stocker la clé sensible au temps
  • mais la méthode de stockage est clé L'adresse mémoire correspondante et le délai d'expiration Politique de suppression et politique dexpulsion Redis Ensuite la stratégie de suppression Redis dont nous parlons aujourd'hui concerne les données supprimées.

Suppression programmée

La suppression programmée consiste à écrire une minuterie, puis à l'utiliser comme la clé Une fois le délai écoulé, la tâche de minuterie supprime immédiatement la clé expirée

Avantages : Il est concevable que la clé soit supprimée à son expiration. C'est certainement la plus conviviale en matière de mémoire et économise de la mémoire

.

Inconvénients : La fonctionnalité monothread de redis est que toutes les commandes sont exécutées dans un certain ordre. Supprimer la valeur de la clé à son expiration exercera plus de pression sur le processeur, ce qui affectera directement le temps de réponse du serveur Redis et les IO

La suppression régulière signifie utiliser le temps en échange d'espace

Une fois la suppression programmée terminée, les données correspondant à la valeur clé seront supprimées et la zone mémoire expirée sera également supprimée directement. Politique de suppression et politique dexpulsion Redis

Suppression paresseuse

En regardant cette image, lorsque la valeur de la clé expirera, elle ne sera plus supprimé directement. Quand sera-t-il supprimé ? Continuer la lecture Politique de suppression et politique dexpulsion Redis

Lorsque nous utilisons la suppression paresseuse, les données ne seront pas automatiquement supprimées à leur expiration. Ensuite, leur méthode de suppression consiste à porter un jugement la prochaine fois que la valeur clé sera obtenue. la clé a expiré et supprimez-la si elle expire.

C'est-à-dire que lorsque get name est à nouveau exécuté, une fonction sera exécutée expirelfNeeded() Cette fonction consiste à déterminer si la clé a expiré. Renvoie zéro une fois expiré, puis supprime-le de la mémoire

Politique de suppression et politique dexpulsion Redis Avantages : Cela réduira une certaine quantité de performances du processeur et ne sera supprimé que lorsqu'il est nécessaire de le supprimer

Inconvénients : C'est certainement le cas. La pression sur la mémoire est élevée, comme certaines actualités brûlantes, une fois le point chaud passé, presque personne n'y accède. Si personne n'accède à la clé, elle existera toujours, ce qui occupera une certaine place. quantité d'espace mémoire pendant une longue période

En d'autres termes, cette méthode Il s'agit d'échanger de l'espace contre du temps

Suppression régulière

Nous avons mentionné deux méthodes de suppression ci-dessus, l'une est la suppression planifiée et l'autre est la suppression différée. La première consiste à échanger de l’espace contre du temps. La première consiste à échanger du temps contre de l’espace. Les deux options sont des méthodes relativement extrêmes. Jetons ensuite un coup d'œil au plan de mise en œuvre pour une suppression régulière.

Jetons d'abord un coup d'œil à l'espace de stockage de redis. Le numéro par défaut est 16. Il existe une base de données de paramètres de configuration dans redis.conf qui est contrôlée par ce paramètre. Chaque base de données possède sa propre partition d'expiration, qui stocke l'adresse des données et le délai d'expiration des données.

Politique de suppression et politique dexpulsion RedisMéthode d'implémentation

Lorsque Redis démarre, il lira la valeur Hz sous le serveur et la valeur par défaut est 10. Cette valeur peut être visualisée directement en utilisant info server sur le terminal

Politique de suppression et politique dexpulsion Redis puis le serveur sera exécuté hz fois par seconde pour l'interrogation serverCron()

Continuez à utiliser bases de donnéesCron pour redis Les 16 bibliothèques accèdent aux informations une par une

Lors de l'accès, activeExpireCycel sera exécuté pour détecter chaque expiration[*] une par une. Le temps d'exécution de chacune est de 250 ms/serveur hz

.

est présent Lorsque chaque expiration[*] est testée une par une, ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC sera sélectionnée au hasard pour les tests

  • Si la clé expire, supprimez-la directement
  • Le nombre de clés supprimées en un tour>ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC*25 % continue de cycler le processus
  • Si le nombre de clés supprimées en un tour25%, check An expire[]

Maintenant le problème vient, notre temps 250ms/hz a été exécuté, mais que devons-nous faire si les 16 bases de données de les expirations n'ont pas été parcourues ! Quelle bibliothèque vais-je parcourir la prochaine fois ? En fait, cette valeur existe, c'est la valeur de current_db. Cette valeur sera enregistrée dans activeExpireCycel la prochaine fois que vous saisirez expires[*] pour exécuter Politique de suppression et politique dexpulsion RedisFonction 1 : Il n'y a pas de valeur de pointe élevée dans l'utilisation du processeur et la fréquence de détection est personnalisée La mémoire sera continuellement nettoyée

Dans ce qui précède, nous avons parlé de trois stratégies de suppression, mais ces trois stratégies ne sont efficaces que par rapport à la clé avec un période de validité définie.

Maintenant que notre redis utilise suffisamment de mémoire, nous allons utiliser la politique d'expulsion pour garantir l'utilisation normale de redis.

Redis appellera freeMemorylfNeeded() pour vérifier si la mémoire est suffisante avant l'exécution de chaque commande. Lorsqu'elle est insuffisante, certaines clés seront effacées. Cette stratégie d'effacement des données est appelée stratégie d'expulsion.

Le paramètre de mémoire maximale utilisable de redis est : maxmemory. La valeur par défaut est 0, qui fait référence à la proportion de mémoire physique occupée. Généralement, le définir sur 50 % est suffisant.

Sélectionnez le. nombre de clés à supprimer à chaque fois : maxmemory-samples

Stratégie de suppression : maxmemory-policy

"Concentrons-nous sur la stratégie de suppression"

  • Facile à détecter Données perdues (c'est-à-dire que nous avons défini la période de validité, mais les données n'ont pas encore expiré, ce qui expire [*] ci-dessus)
    • volatile-lru : Sélectionnez les données rarement utilisées récemment
    • volatile-lfu : Sélectionnez les données les moins utilisées récemment
    • volatile-ttl : Sélectionnez les données qui seront éliminées
    • volatile-aléatoire : sélectionner au hasard

Regardez ensuite une image

  • 9s C'est l'heure actuelle

  • La clé la plus longue à 9 secondes est l'âge

  • utiliser La clé la moins fréquente est le genre

  • Si vous suivez volatile-lru , l'âge sera supprimé

  • Si vous suivez volatile-lfu, le sexe sera suppriméPolitique de suppression et politique dexpulsion Redis

  • Détecter toutes les données

    • allkeys-lru : sélectionnez les données les moins utilisées récemment
    • allkeys-lfu : Sélectionnez les données dont l'utilisation est la moins récente
    • allkeys-random : Supprimez aléatoirement toute la base de données
  • Abandonner l'expulsion des données

    • no-enviction : les données ne seront pas supprimées tant que la mémoire n'est pas épuisée, provoquant une erreur oom.

Résumé

Ce qui précède est le paire redis Politique de suppression de données et politique d'expulsion.

Une chose à noter ici est que dans la politique d'expulsion, les données volatiles font référence à la clé avec un délai d'expiration défini et ne constituent pas une valeur permanente.

L'ensemble de la base de données fait référence à toutes les valeurs, avec délai d'expiration et ensemble de données permanent.

La persévérance dans l'apprentissage, la persévérance dans les blogs et la persévérance dans le partage sont les convictions auxquelles Kaka adhère depuis sa carrière. J'espère que les articles de Kaka dans l'immense Internet. peut vous apporter un peu Rendez-vous dans le prochain numéro

Recommandé : "tutoriel redis"

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