Table des matières
1. Préface
2. Caractéristiques des données dans Redis
3. Structure de stockage de données sensibles au temps
4. Stratégie de suppression de données
1、定时删除
2、惰性删除
3、定期删除
1. Suppression programmée
2. Suppression paresseuse
3. Suppression régulière
6. Algorithme d'expulsion
1. Introduction au concept
2、八种配置
Maison base de données Redis Trois méthodes de stratégie de suppression Redis et analyse d'exemples d'algorithmes d'expulsion

Trois méthodes de stratégie de suppression Redis et analyse d'exemples d'algorithmes d'expulsion

Jun 02, 2023 pm 01:43 PM
redis

1. Préface

Avant de commencer l'article, laissez-moi vous poser une question : Lorsque nous utilisons la commande : expire key second给一个key设置过期时间,过期时间一到,这个key对应的过期数据Est-elle vraiment supprimée immédiatement par le serveur ? La réponse est qu’il ne sera pas supprimé immédiatement. Connaissant cette réponse, examinons comment les données expirées sont traitées dans Redis.

2. Caractéristiques des données dans Redis

Redis est une base de données au niveau de la mémoire. Toutes les données sont stockées dans la mémoire. Les données dans la mémoire peuvent obtenir leur statut via des instructions TTL :

. Résultat de la commandeStatutXXDonnées temporelles-1Données valides en permanence-2Données expirées ou données supprimées ou données non définies

3. Structure de stockage de données sensibles au temps

Trois méthodes de stratégie de suppression Redis et analyse dexemples dalgorithmes dexpulsion

Lorsque nous utilisons des instructions pour définir des données expirées, l'adresse correspondant aux données sera placée dans l'espace d'expiration. La méthode de stockage est le hachage et la valeur stockée est l'expiration. temps.

4. Stratégie de suppression de données

Objectif de la stratégie de suppression de données :Trouver un équilibre entre l'utilisation de la mémoire et l'utilisation du processeur. Ne pas se soucier de l'un ou de l'autre entraînera une diminution des performances globales de Redis, voire une diminution. provoquer un temps d'arrêt du serveur ou une fuite de mémoire 数据删除策略目标:在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降,甚至引发服务器宕机或内存泄露

1、定时删除

  • 创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作

  • 优点:节约内存,到时就删除,快速释放掉不必要的内存占用

  • 缺点:CPU压力很大,无论CPU此时负载量多高,均占用CPU,会影响redis服务器响应时间和指令吞吐量

Trois méthodes de stratégie de suppression Redis et analyse dexemples dalgorithmes dexpulsion

2、惰性删除

  • 数据到达过期时间,不做处理。等下次访问该数据时,会调用expireIfNeeded()函数来判断该数据是否过期: 如果未过期,返回数据,发现已过期,删除,返回不存在

  • 优点:节约CPU性能,发现必须删除的时候才删除

  • 缺点:内存压力很大,出现长期占用内存的数据

Trois méthodes de stratégie de suppression Redis et analyse dexemples dalgorithmes dexpulsion

3、定期删除

Trois méthodes de stratégie de suppression Redis et analyse dexemples dalgorithmes dexpulsion

流程分析:

  • Redis服务器启动初始化时,读取配置server.hz的值,默认为10

  • 然后每秒钟执行10次serverCron()方法,该方法用来检测服务器

  • serverCron()方法又会调用databasesCron()方法,该方法是用来遍历数据库的,redis默认有16个数据库,从第一个数据库开始

  • databasesCron()方法又会调用activeExpireCycle()方法,该方法会对每一个expires[*]逐一进行检测,每次执行250ms/server.hz;对某个expires[*]检测时,随机挑选W个key检测

  • 如果检测到key超时,则删除key;如果一轮中删除的key的数量>W25%,循环该过程;如果一轮中删除的key的数量≤W25%,检查下一个expires[*],0-15循环。其中W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值

  • 如果activeExpireCycle()执行时间到期,下次从current_db继续向下执行

  • 参数current_db用于记录activeExpireCycle() 进入哪个expires[*] 执行

Trois méthodes de stratégie de suppression Redis et analyse dexemples dalgorithmes dexpulsion

  • 总结:

    1. Suppression programmée

    • Créez une minuterie lorsque la clé est définie pour avoir un délai d'expiration. le délai d'expiration est atteint, la tâche du minuteur effectuera immédiatement les opérations de suppression de clé
    • Avantages : Économisez de la mémoire, supprimez le moment venu et libérez rapidement l'utilisation inutile de la mémoire

    Inconvénients :Pression du processeur Elle est très importante. Quelle que soit la charge du processeur à ce moment-là, elle occupera le processeur, ce qui affectera le temps de réponse du serveur Redis et le débit des instructionsTrois méthodes de stratégie de suppression Redis et analyse d'exemples d'algorithmes d'expulsionAvantages :Enregistrez les performances du processeur, supprimez uniquement lorsque vous estimez qu'il est nécessaire de supprimer

    3. Suppression régulière

    Trois méthodes de stratégie de suppression Redis et d'algorithme d'expulsion Exemple d'analyse
    Lorsque le serveur Redis démarre et initialise, lisez la valeur de la configuration server.hz, la valeur par défaut est 10 Ensuite, la méthode serverCron() est exécutée 10 fois par seconde, qui est utilisée pour détecter le serveur

    2. Suppression paresseuse

      Les données atteignent le délai d'expiration et ne seront pas traitées. Lors du prochain accès aux données, la fonction expireIfNeeded() sera appelée pour déterminer si les données ont expiré : si elles n'ont pas expiré, renvoyez les données, trouvez qu'elles ont expiré, supprimez-les et le retour n'existe pas
      Inconvénients :Pression élevée de la mémoire, données qui prend de la mémoire pendant longtemps apparaît Trois méthodes de suppression de Redis stratégie et analyse d'exemples d'algorithmes d'expulsion
      Analyse du processus :
      🎜La méthode serverCron() appellera à son tour la méthode databasesCron(), cette méthode est utilisée pour parcourir la base de données Redis a 16 bases de données par défaut, à partir de la. la première méthode database🎜🎜🎜🎜databasesCron() appellera la méthode activeExpireCycle(), cette méthode détectera chaque expire[*] un par un , exécutant 250ms/server.hz ​​​​à chaque fois ; pendant un certain expire[* ] Pendant la détection, sélectionnez au hasard les clés W pour la détection🎜🎜🎜🎜Si le délai d'expiration de la clé est détecté, supprimez la clé ; si le nombre de clés supprimées en un tour > W25%, bouclez le processus ; si en un tour le nombre de clés supprimées est expire[*], 0-15 cycle. . Parmi eux, la valeur de l'attribut W = ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP🎜🎜🎜🎜Si le temps d'exécution de activeExpireCycle() expire, l'exécution continuera à partir de current_db la prochaine fois🎜🎜🎜🎜Le paramètre current_db est utilisé pour enregistrer ce qui expire[*] activeExpireCycle () entre pour exécution🎜🎜 🎜🎜Trois méthodes de stratégie de suppression Redis et analyse de Exemples d'algorithmes d'expulsion 🎜
        🎜🎜Résumé : Interrogez périodiquement les données opportunes dans la bibliothèque Redis, adoptez une stratégie d'extraction aléatoire et utilisez la proportion des données expirées pour contrôler la fréquence de suppression 🎜🎜🎜🎜La pression mémoire n'est pas très élevée, les données froides qui occupent la mémoire depuis longtemps seront nettoyées en continu 🎜🎜🎜🎜 5. Comparaison des stratégies de suppression 🎜🎜🎜🎜🎜Suppression régulière 🎜🎜 économise de la mémoire, aucune occupation 🎜🎜 peu importe Les périodes occupent les ressources du processeur, haute fréquence🎜🎜Temps d'échange contre de l'espace🎜🎜🎜🎜Suppression paresseuse🎜🎜Utilisation importante de la mémoire🎜🎜Exécution retardée, utilisation élevée du processeur🎜🎜Echange d'espace contre du temps🎜🎜 🎜🎜Suppression régulière🎜🎜Mémoire Nettoyage aléatoire régulier🎜🎜dépense des ressources CPU fixes par seconde pour maintenir la mémoire🎜🎜vérifications ponctuelles aléatoires et ciblées🎜🎜🎜🎜

        6. Algorithme d'expulsion

        1. Introduction au concept

        Que faire si la mémoire est insuffisante lorsque de nouvelles données entrent dans Redis ? Redis utilise la mémoire pour stocker les données. Avant d'exécuter chaque commande, freeMemoryIfNeeded() sera appelé pour vérifier si la mémoire est suffisante. Si la mémoire ne répond pas aux exigences minimales de stockage pour les données nouvellement ajoutées, redis supprimera temporairement certaines données pour libérer de l'espace de stockage pour l'instruction en cours. La stratégie de nettoyage des données s’appelle l’algorithme d’expulsion. freeMemoryIfNeeded()检测内存是否充足。如果内存不满足新加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理存储空间。清理数据的策略称为逐出算法。

        注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间,如果不成功则反复执行。当对所有数据尝试完毕后,如果不能达到内存清理的要求,将出现错误信息。

        Trois méthodes de stratégie de suppression Redis et analyse dexemples dalgorithmes dexpulsion

        2、八种配置

        检测易失数据(可能会过期的数据集server.db[i].expires

        volatile-lru 挑选最近最少使用的数据淘汰
        volatile-lfu 挑选最近使用次数最少的数据淘汰
        volatile-ttl 挑选将要过期的数据淘汰
        volatile-random 任意选择数据淘汰

        检测全库数据(所有数据集server.db[i].dict

        Remarque : Le processus d'expulsion des données n'est pas capable à 100 % de libérer suffisamment d'espace mémoire utilisable. S'il échoue, il sera exécuté à plusieurs reprises. Après avoir essayé toutes les données, si les exigences de nettoyage de la mémoire ne peuvent pas être satisfaites, un message d'erreur apparaîtra. Détecter les données volatiles (Ensemble de données server.db[i].expires qui peut expirer)volatile-lruSélectionnez l'élimination des données la moins récemment utiliséevolatile-lfuChoisissez les données les moins récemment utilisées à éliminer
        Trois méthodes de stratégie de suppression Redis et analyse d'exemples d'algorithmes d'expulsion 2. Huit configurations

        volatile-ttl

        Choisissez les données sur le point d'expirervolatile-randomChoisissez les données à éliminer
        🎜🎜 Détecter l'intégralité des données de la base de données (tous les ensembles de données server.db[i].dict)🎜🎜🎜🎜🎜allkeys-lru🎜🎜Sélectionner les données les moins récemment utilisées à éliminer🎜🎜🎜🎜allkeys- lfu 🎜🎜Choisissez les données les moins récemment utilisées pour l'élimination🎜🎜🎜🎜allkeys-random🎜🎜Toute sélection de données pour l'élimination🎜🎜🎜🎜🎜🎜abandonner l'expulsion des données : 🎜🎜🎜🎜🎜🎜no-enviction🎜 🎜 interdire l'expulsion des données (stratégie par défaut redis4 .0)🎜🎜🎜🎜

      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 de ce site Web
      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

      Outils d'IA chauds

      Undress AI Tool

      Undress AI Tool

      Images de déshabillage gratuites

      Undresser.AI Undress

      Undresser.AI Undress

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

      AI Clothes Remover

      AI Clothes Remover

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

      Clothoff.io

      Clothoff.io

      Dissolvant de vêtements AI

      Video Face Swap

      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

      Guide de construction d'Agnes Tachyon | Un joli Musume Derby
      2 Il y a quelques semaines By Jack chen
      Oguri Cap Build Guide | Un joli Musume Derby
      3 Il y a quelques semaines By Jack chen
      Péx: comment raviver les joueurs
      4 Il y a quelques semaines By DDD
      Guide de construction de Grass Wonder | Uma musume joli derby
      1 Il y a quelques semaines By Jack chen
      Pic comment émoter
      3 Il y a quelques semaines By Jack chen

      Outils chauds

      Bloc-notes++7.3.1

      Bloc-notes++7.3.1

      Éditeur de code facile à utiliser et gratuit

      SublimeText3 version chinoise

      SublimeText3 version chinoise

      Version chinoise, très simple à utiliser

      Envoyer Studio 13.0.1

      Envoyer Studio 13.0.1

      Puissant environnement de développement intégré PHP

      Dreamweaver CS6

      Dreamweaver CS6

      Outils de développement Web visuel

      SublimeText3 version Mac

      SublimeText3 version Mac

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

      Points d'optimisation de Laravel8 Points d'optimisation de Laravel8 Apr 18, 2025 pm 12:24 PM

      Laravel 8 fournit les options suivantes pour l'optimisation des performances: Configuration du cache: utilisez Redis pour cache des pilotes, des façades de cache, des vues de cache et des extraits de page. Optimisation de la base de données: établissez l'indexation, utilisez la portée de la requête et utilisez des relations éloquentes. Optimisation JavaScript et CSS: utilisez le contrôle de version, fusionnez et rétractable, utilisez CDN. Optimisation du code: utilisez le package d'installation du compositeur, utilisez les fonctions Laravel Helper et suivez les normes PSR. Surveillance et analyse: utilisez Laravel Scout, utilisez le télescope, surveillez les mesures d'application.

      Comment utiliser la solution Redis Cache pour réaliser efficacement les exigences de la liste de classement des produits? Comment utiliser la solution Redis Cache pour réaliser efficacement les exigences de la liste de classement des produits? Apr 19, 2025 pm 11:36 PM

      Comment la solution de mise en cache Redis réalise-t-elle les exigences de la liste de classement des produits? Pendant le processus de développement, nous devons souvent faire face aux exigences des classements, comme l'affichage d'un ...

      Que faire si le cache Redis échoue dans Spring Boot? Que faire si le cache Redis échoue dans Spring Boot? Apr 19, 2025 pm 08:03 PM

      Dans Springboot, utilisez Redis pour mettre en cache l'objet OAuth2Authorisation. Dans l'application Springboot, utilisez SpringSecurityoAuth2AuthorizationsServer ...

      Les meilleurs packs d'extension de Laravel recommandés: 2024 outils essentiels Les meilleurs packs d'extension de Laravel recommandés: 2024 outils essentiels Apr 30, 2025 pm 02:18 PM

      Les packages d'extension Laravel essentiels pour 2024 incluent: 1. Laraveldebugbar, utilisé pour surveiller et déboguer le code; 2. Laraveltelescope, fournissant une surveillance détaillée des applications; 3. Laravelhorizon, gérant les tâches de file d'attente Redis. Ces packs d'extension peuvent améliorer l'efficacité du développement et les performances des applications.

      Construction de l'environnement Laravel et configuration de base (Windows / Mac / Linux) Construction de l'environnement Laravel et configuration de base (Windows / Mac / Linux) Apr 30, 2025 pm 02:27 PM

      Les étapes pour créer un environnement Laravel sur différents systèmes d'exploitation sont les suivantes: 1.Windows: Utilisez XAMPP pour installer PHP et compositeur, configurer les variables environnementales et installer Laravel. 2.MAC: Utilisez Homebrew pour installer PHP et Composer et installer Laravel. 3.Linux: utilisez Ubuntu pour mettre à jour le système, installer PHP et compositeur et installer Laravel. Les commandes et chemins spécifiques de chaque système sont différents, mais les étapes de base sont cohérentes pour assurer la construction fluide de l'environnement de développement de Laravel.

      Rôle de Redis: Explorer les capacités de stockage et de gestion des données Rôle de Redis: Explorer les capacités de stockage et de gestion des données Apr 22, 2025 am 12:10 AM

      Redis joue un rôle clé dans le stockage et la gestion des données, et est devenu le cœur des applications modernes à travers ses multiples structures de données et mécanismes de persistance. 1) Redis prend en charge les structures de données telles que les chaînes, les listes, les collections, les collections ordonnées et les tables de hachage, et convient au cache et à la logique métier complexe. 2) Grâce à deux méthodes de persistance, RDB et AOF, Redis assure un stockage fiable et une récupération rapide des données.

      Dans un environnement multi-nœuds, comment s'assurer que la tâche de synchronisation @Scheduled de Spring Boot est exécutée uniquement sur un seul nœud? Dans un environnement multi-nœuds, comment s'assurer que la tâche de synchronisation @Scheduled de Spring Boot est exécutée uniquement sur un seul nœud? Apr 19, 2025 pm 10:57 PM

      La solution d'optimisation pour les tâches de synchronisation Springboot dans un environnement multi-nœuds développe le ressort ...

      Comment choisir une base de données Gitlab dans CentOS Comment choisir une base de données Gitlab dans CentOS Apr 14, 2025 pm 05:39 PM

      Lors de l'installation et de la configuration de GitLab sur un système CentOS, le choix de la base de données est crucial. Gitlab est compatible avec plusieurs bases de données, mais PostgreSQL et MySQL (ou MARIADB) sont le plus couramment utilisés. Cet article analyse les facteurs de sélection de la base de données et fournit des étapes détaillées d'installation et de configuration. Guide de sélection de la base de données Lors du choix d'une base de données, vous devez considérer les facteurs suivants: PostgreSQL: la base de données par défaut de GitLab est puissante, a une évolutivité élevée, prend en charge les requêtes complexes et le traitement des transactions et convient aux grands scénarios d'application. MySQL / MARIADB: une base de données relationnelle populaire largement utilisée dans les applications Web, avec des performances stables et fiables. MongoDB: base de données NoSQL, se spécialise dans

      See all articles