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

Politique de suppression et politique d'expulsion Redis

咔咔
咔咔original
2020-05-28 18:29:591479parcourir

Points de connaissance de cet article

Concept de données expirées

Stratégie de suppression des données

Algorithme d'expulsion

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 d'expulsion Redis

Dans Redis, nous pouvons utiliser ttl pour obtenir le statut d'une certaine clé. Utilisons ttl pour obtenir respectivement le statut du nom, de l'âge et du sexe


Vous pouvez voir trois valeurs sortir, qui sont -1 775 -2


Alors quelles informations donnent 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, exprimée comme Le temps de validité restant
  • -2 indique des données expirées, ou des données supprimées, ou des données qui n'ont pas de définition
    Politique de suppression et politique d'expulsion 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é temporelle
  • , mais la méthode de stockage est l'adresse mémoire correspondant à la clé et le délai d'expiration
    Politique de suppression et politique d'expulsion 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 lorsque le temps de clé expire, la tâche de minuterie supprimera immédiatement la clé expirée


Avantages : Vous pouvez imaginer que la clé sera supprimée à son expiration. C'est certainement la plus conviviale en matière de mémoire et économise 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 E/S


La suppression programmée signifie utiliser du temps en échange d'espace


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

Politique de suppression et politique d'expulsion Redis


Suppression différée


Vérifiez-le Cette image ne sera pas supprimée directement après l'expiration de la valeur clé. Quand sera-t-elle supprimée ? Continuez à lire ci-dessous

Politique de suppression et politique d'expulsion Redis


Lorsque nous utilisons la suppression différée, les données ne seront pas supprimées automatiquement après leur expiration, leur méthode de suppression est donc , la prochaine fois que la valeur de la clé sera obtenue, un jugement sera effectué pour déterminer si la clé a expiré. Si elle a expiré, elle sera supprimée.


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 d'expulsion Redis

Avantages : Cela réduira un certain montant des performances du processeur. Il ne sera supprimé que lorsqu'il sera nécessaire de supprimer


Inconvénients : Il faut que la pression de la mémoire soit élevée, comme certaines actualités brûlantes, après le le point chaud est terminé, presque personne n'y accédera. Cette clé existera toujours si personne n'y accède, et elle occupera une certaine quantité d'espace mémoire pendant longtemps


En d'autres termes, cette méthode consiste à é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. Il y en a 16 par défaut. 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 d'expulsion Redis

Méthode d'implémentation


redis démarre Quand, la valeur de Hz sous le serveur sera lue, et la valeur par défaut est 10. Cette valeur est consultable directement dans le terminal en utilisant info server vers


Politique de suppression et politique d'expulsion Redis

Ensuite, le serveur sera exécuté Hz fois par seconde pour l'interrogation serverCron()


Continuer à utiliser bases de donnéesCron pour accéder aux informations de 16 bibliothèques redis une par une


Pendant l'accès, activeExpireCycel sera exécuté pour détecter chacune des expirations[*] une par une. l'exécution est le paramètre 250 ms/serveur hz


Lors du test de chaque expiration[*] un par un, ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC sera choisi au hasard pour les tests


  • Si le délai de la clé expire, supprimez la clé directement
  • Nombre de clés supprimées en un seul tour>ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC*25 % continuez à cycler le processus
  • Si en un tour Le nombre de clés supprimées<=ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC25%, vérifiez que la suivante expire[]


Alors vient maintenant le problème, notre 250 ms/hz a été exécuté à ce moment-là, mais que dois-je faire si les 16 bases de données d'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 enregistrera activeExpireCycel et l'exécutera la prochaine fois que vous saisirez expires[*]

Politique de suppression et politique d'expulsion Redis

Fonction 1 : Pas de pics élevés d'utilisation du processeur, paramètres personnalisés pour la fréquence de détection


Fonction 2 : La pression mémoire ne sera pas très élevée, et la mémoire occupée depuis longtemps sera continuellement nettoyée


Algorithme d'expulsion


Nous avons mentionné trois stratégies de suppression ci-dessus, mais ces trois stratégies ne sont efficaces que par rapport à la clé avec une période de validité fixée.


Maintenant que notre redis utilise une mémoire insuffisante, nous utiliserons 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. s’appelle la politique d’expulsion.


Le paramètre de la mémoire maximale utilisable de redis est : maxmemory La valeur par défaut est 0. Il fait référence à la proportion de mémoire physique occupée. ça suffit


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


Politique de suppression : maxmemory-policy


Concentrons-nous sur la stratégie de suppression


  • Détection des données volatiles (c'est-à-dire que nous avons défini la période de validité, mais elle a pas encore expiré Les données expirent[*]) ci-dessus Données minimales
volatile-ttl : Choisissez les données à éliminer
      volatile-random : Sélectionnez au hasard
    • Regardez une photo ensuite

  • 9s est l'heure actuelle
  • La clé la plus longue de 9s est l'âge
  • La clé la moins utilisée est le sexe
  • Si selon volatile, lru supprimera âge
  • Si vous suivez volatile-lfu, le sexe sera supprimé
    Politique de suppression et politique d'expulsion Redis
  • Détecter toutes les données
    • allkeys-lru : sélectionnez les données qui ont été les moins utilisées récemment
    • allkeys-lfu : sélectionnez les données qui ont été les moins utilisées récemment
    • allkeys-random : utilisez aléatoirement le base de données entière Supprimer
  • Abandonner l'expulsion des données
    • no-enviction : les données ne seront supprimées que lorsque la mémoire est épuisé, provoquant une erreur oom.


Résumé


Ce qui précède est la stratégie de suppression et la stratégie d'expulsion de Redis pour les données .


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.

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