Un article pour parler de la stratégie d'expiration dans Redis
Cet article vous présentera la stratégie d'expiration dans Redis et verra comment mettre en œuvre la stratégie de suppression paresseuse et la stratégie de suppression régulière. J'espère qu'il vous sera utile !
Enregistrez le délai d'expiration
Redis peut définir le délai d'expiration pour chaque clé et placera chaque clé avec un délai d'expiration défini dans un dictionnaire indépendant. [Recommandations associées : Tutoriel vidéo Redis]
typedef struct redisDb { int id; //id是数据库序号,为0-15(默认Redis有16个数据库) long avg_ttl; //存储的数据库对象的平均ttl(time to live),用于统计 dict *dict; //存储数据库所有的key-value dict *expires; //存储key的过期时间 dict *blocking_keys;//blpop 存储阻塞key和客户端对象 dict *ready_keys;//阻塞后push 响应阻塞客户端 存储阻塞后push的key和客户端对象 dict *watched_keys;//存储watch监控的的key和客户端对象 } redisDb;
dict est utilisé pour conserver toutes les paires clé-valeur contenues dans une base de données Redis, expires est utilisé pour conserver les clés avec des délais d'expiration définis dans une base de données Redis (c'est-à-dire la clé et le mappage des échecs fois). Notez que le délai d'expiration ici est exprimé en horodatages en millisecondes. Par exemple, s'il expire le 02/01/2022 à 22:45:02, la valeur est 1641134702000
Lorsque nous utilisons la commande expire pour définir le délai d'expiration de. une clé, Redis arrive en premier Recherchez dans la table du dictionnaire dict pour voir si la clé à définir existe. Si elle existe, ajoutez la clé et le délai d'expiration à la table du dictionnaire expire.
Lorsque nous utilisons la commande setex pour insérer des données dans le système, Redis ajoute d'abord la clé et la valeur au dict de la table du dictionnaire, puis ajoute la clé et le délai d'expiration à la table du dictionnaire. Notez que setex ne peut être utilisé que pour les chaînes.
Pour faire simple, la clé avec le délai d'expiration défini et le délai d'expiration spécifique sont tous conservés dans la table du dictionnaire des expirations.
Définir le délai d'expiration
Utilisation de expire
La commande expire est utilisée comme suit : expire key ttl (unité secondes)
127.0.0.1:6379> expire name 2 #2秒失效 (integer) 1 127.0.0.1:6379> get name (nil) 127.0.0.1:6379> set name zhangfei OK 127.0.0.1:6379> ttl name #永久有效 (integer) -1 127.0.0.1:6379> expire name 30 #30秒失效 (integer) 1 127.0.0.1:6379> ttl name #还有24秒失效 (integer) 24 127.0.0.1:6379> ttl name #失效 (integer) -2
Redis a quatre commandes différentes qui peuvent être utilisées pour définir le temps de survie de la clé (clé combien de temps peut-elle survivre) ou le délai d'expiration (quand la clé sera-t-elle supprimée) : La commande
expire est utilisée pour définir le temps de survie de la clé sur ttlseconds
la commande pexpire est utilisée pour définir la durée de survie de la clé temps de survie en ttl La commande millisecondes
expireat est utilisée pour définir le délai d'expiration de la clé clé sur l'horodatage secondes spécifié par timestamp. La commande pexpireat est utilisée pour définir le délai d'expiration de la clé clé sur le . millisecondes
horodatage spécifié par timestamp.Notez que l'implémentation finale de expire, pexpire et expireat est toutes implémentée via pexpireat, ce qui signifie que quelle que soit la commande exécutée par le client, Redis la convertira en commande pexpireat pour l'exécution. Par conséquent, l’heure stockée dans le dictionnaire d’expiration est l’heure d’expiration de la clé représentée par l’horodatage milliseconde.
Politique d'expiration
Si une clé expire, quand sera-t-elle supprimée ?
Il existe trois stratégies d'expirationSuppression programmée : tout en définissant l'heure d'expiration de la clé, créez une minuterie afin que la minuterie puisse immédiatement effectuer la suppression de la clé lorsque l'heure d'expiration de la clé arrive. (
Créer une suppression par minuterie- )
- Suppression paresseuse : laissez l'expiration de la clé tranquille, mais chaque fois que vous obtenez la clé de l'espace clé, vérifiez si la clé obtenue a expiré, supprimez la clé si ; elle n'a pas expiré, la clé est restituée. (Supprimer lors de l'utilisation )
- Suppression régulière : de temps en temps, le programme vérifie la base de données et supprime les clés expirées. Il existe des décisions algorithmiques quant au nombre de clés expirées à supprimer et au nombre de bases de données à vérifier. (Analyse et suppression régulières )
- Suppression programmée
Avantages
- 1. Le plus convivial pour la mémoire : en utilisant une minuterie, vous pouvez vous assurer que les clés expirées seront supprimées le plus rapidement possible pour être libérées. la mémoire occupée.
Inconvénients
- 1. Le moins convivial pour le CPU : Lorsqu'il y a de nombreuses clés expirées, la suppression des clés expirées peut prendre une partie considérable du temps CPU, affectant le temps de réponse et le débit du serveur.
Suppression paresseuse
Avantages
- 1. Les clés expirées ne seront vérifiées que lorsque la clé est supprimée, c'est-à-dire que le processeur n'a pas besoin d'analyser régulièrement, et il n'y a pas de vérification. besoin de créer un grand nombre de minuteries.
Inconvénients
- 1. Le moins convivial pour la mémoire : Si une clé a expiré mais ne sera pas consultée ultérieurement, elle restera dans la base de données. S'il y a trop de clés de ce type, cela occupera sans aucun doute beaucoup de mémoire.
Suppression périodique
La suppression périodique est un compromis entre la suppression programmée ci-dessus et la suppression paresseuse.
Avantages
- 1. La suppression périodique effectue une opération de clé d'expiration de temps en temps et réduit l'impact des opérations de suppression sur le temps CPU en limitant la durée et la fréquence des opérations de suppression.
Stratégie d'expiration de Redis
Redis utilise deux stratégies : suppression paresseuse et suppression régulière : en utilisant ces deux stratégies, le serveur peut trouver un bon équilibre entre l'utilisation rationnelle du temps CPU et éviter le gaspillage d'espace mémoire. équilibre.
Implémentation d'une stratégie de suppression paresseuse
Suppression paresseuse des clés expirées La stratégie de suppression est implémentée par la fonction db.c/expireIfNeeded Toutes les commandes Redis qui lisent et écrivent dans la base de données appelleront la fonction expireIfNeed pour vérifier l'entrée. clé avant l'exécution :
- Si la clé a expiré, alors la fonction expireIfNeeded supprimera la clé
- Si la clé n'a pas expiré, alors la fonction expireIfNeeded ne fera pas l'opération
Le processus d'appel de la fonction expireIfNeeded par la commande est comme indiqué ci-dessous
De plus, comme chaque clé accessible peut être supprimée, chaque commande doit donc être capable de gérer à la fois la présence et l'absence de la clé. La figure suivante montre le processus d'exécution de la commande get
Mise en œuvre d'une stratégie de suppression régulière
La stratégie de suppression régulière des clés expirées est implémentée par la fonction redis.c/activeExpireCycle, chaque fois que le serveur Redis est périodiquement fonctionne redis.c Lorsque la fonction /serverCron est exécutée, la fonction activeExpireCycle sera appelée, qui parcourt chaque base de données du serveur plusieurs fois dans un délai spécifié.
Redis effectue 10 analyses d'expiration par seconde par défaut. Les analyses d'expiration ne parcourent pas toutes les clés du dictionnaire d'expiration, mais adoptent une stratégie gourmande simple.
(1) Sélectionnez au hasard 20 clés dans le dictionnaire expiré.
(2) Supprimez les clés expirées parmi ces 20 clés.
(3) Si la proportion de clés expirées dépasse 1/4, répétez l'étape (1). Dans le même temps, afin de garantir que l'analyse expirée n'effectue pas un cycle excessif et ne provoque pas le gel du processus, l'algorithme augmente également la limite supérieure du temps d'analyse, qui ne dépassera pas 25 ms par défaut.
Supposons que toutes les clés d'une grande instance Redis expirent en même temps, que se passera-t-il ?
Consommation du processeur
Redis continuera à analyser le dictionnaire expiré (cycle plusieurs fois) jusqu'à ce que le dictionnaire expiré expire. s'arrêter lorsque les clés deviennent rares (le nombre de cycles diminue considérablement).
Entraînant un retard ou un délai d'attente de la demande
Lorsque la demande du client arrive, si le serveur entre dans l'état d'analyse expiré, la demande du client attendra au moins 25 ms avant d'être traitée si le client définit le délai d'attente relativement court. , comme 10 ms, alors un grand nombre de connexions seront fermées en raison d'un délai d'attente, et de nombreuses exceptions se produiront du côté commercial
Assurez-vous donc de faire attention au délai d'expiration si un grand nombre de clés expirent, définissez-le. une plage aléatoire pour le délai d'expiration et ne peuvent pas tous expirer en même temps.
Pour plus de connaissances sur la programmation, veuillez visiter : Introduction à la programmation ! !
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

Comment effacer les données Redis: utilisez la commande flushall pour effacer toutes les valeurs de clé. Utilisez la commande flushdb pour effacer la valeur clé de la base de données actuellement sélectionnée. Utilisez SELECT pour commuter les bases de données, puis utilisez FlushDB pour effacer plusieurs bases de données. Utilisez la commande del pour supprimer une clé spécifique. Utilisez l'outil Redis-CLI pour effacer les données.

Pour lire une file d'attente à partir de Redis, vous devez obtenir le nom de la file d'attente, lire les éléments à l'aide de la commande LPOP et traiter la file d'attente vide. Les étapes spécifiques sont les suivantes: Obtenez le nom de la file d'attente: Nommez-le avec le préfixe de "Fitre:" tel que "Fitre: My-Quyue". Utilisez la commande LPOP: éjectez l'élément de la tête de la file d'attente et renvoyez sa valeur, telle que la file d'attente LPOP: My-Queue. Traitement des files d'attente vides: si la file d'attente est vide, LPOP renvoie NIL et vous pouvez vérifier si la file d'attente existe avant de lire l'élément.

L'utilisation de la directive Redis nécessite les étapes suivantes: Ouvrez le client Redis. Entrez la commande (Verbe Key Value). Fournit les paramètres requis (varie de l'instruction à l'instruction). Appuyez sur Entrée pour exécuter la commande. Redis renvoie une réponse indiquant le résultat de l'opération (généralement OK ou -err).

L'utilisation des opérations Redis pour verrouiller nécessite l'obtention du verrouillage via la commande setnx, puis en utilisant la commande Expire pour définir le temps d'expiration. Les étapes spécifiques sont les suivantes: (1) Utilisez la commande setnx pour essayer de définir une paire de valeurs de clé; (2) Utilisez la commande Expire pour définir le temps d'expiration du verrou; (3) Utilisez la commande del pour supprimer le verrouillage lorsque le verrouillage n'est plus nécessaire.

La meilleure façon de comprendre le code source redis est d'aller étape par étape: familiarisez-vous avec les bases de Redis. Sélectionnez un module ou une fonction spécifique comme point de départ. Commencez par le point d'entrée du module ou de la fonction et affichez le code ligne par ligne. Affichez le code via la chaîne d'appel de fonction. Familiez les structures de données sous-jacentes utilisées par Redis. Identifiez l'algorithme utilisé par Redis.

Utilisez l'outil de ligne de commande redis (Redis-CLI) pour gérer et utiliser Redis via les étapes suivantes: Connectez-vous au serveur, spécifiez l'adresse et le port. Envoyez des commandes au serveur à l'aide du nom et des paramètres de commande. Utilisez la commande d'aide pour afficher les informations d'aide pour une commande spécifique. Utilisez la commande QUIT pour quitter l'outil de ligne de commande.

Les causes de la perte de données redis incluent les défaillances de mémoire, les pannes de courant, les erreurs humaines et les défaillances matérielles. Les solutions sont: 1. Stockez les données sur le disque avec RDB ou AOF Persistance; 2. Copiez sur plusieurs serveurs pour une haute disponibilité; 3. Ha avec Redis Sentinel ou Redis Cluster; 4. Créez des instantanés pour sauvegarder les données; 5. Mettre en œuvre les meilleures pratiques telles que la persistance, la réplication, les instantanés, la surveillance et les mesures de sécurité.
