Maison tutoriels informatiques connaissances en informatique Guide d'optimisation Redis : réseau, mémoire, disque, points de blocage

Guide d'optimisation Redis : réseau, mémoire, disque, points de blocage

Feb 19, 2024 pm 12:18 PM
redis 内存 网络 内存占用 string类 键值对

Guide doptimisation Redis : réseau, mémoire, disque, points de blocage

Étant donné que Redis est une opération basée sur la mémoire, le processeur ne constitue pas un goulot d'étranglement en termes de performances. Au contraire, l'utilisation de la mémoire du serveur, les E/S réseau et les lectures et écritures sur le disque jouent un rôle clé dans les performances de Redis.

Par conséquent, nous nous concentrerons sur l'optimisation d'aspects tels que le réseau, la mémoire, le disque et les points de blocage. Si une terminologie n'est pas claire, il est recommandé de se référer au contenu redis dans les numéros précédents ou de consulter les informations pertinentes.

Optimisation du réseau

Si le client demande au serveur, c'est-à-dire en mode "requête-réponse", utilisez autant que possible le traitement par lots pour réduire la surcharge d'E/S du réseau.

Technologie de traitement par lots : instructions de traitement par lots atomiques m, technologie pipline, redis, transactions, scripts lua.

Le traitement par lots réduit la surcharge des E/S du réseau

Instructions de traitement par lots Atomic m : type de chaîne, il est recommandé d'utiliser mget/mset au lieu de get/set ; il est recommandé d'utiliser hmget/hmset au lieu de hget/hset.

Technologie Pipeline : la technologie Pipeline peut être utilisée lorsqu'il y a des opérations par lots lors de l'utilisation de list, set et zset.

Transaction Redis : recommandée lorsque des exigences commerciales particulières nécessitent plusieurs instructions.

Script Lua : Il est recommandé d'utiliser le script Lua lorsque vous devez garantir l'atomicité de plusieurs instructions. Des exemples spécifiques incluent le déverrouillage distribué, les ventes flash et la réduction des stocks.

Optimisation du réseau inter-nœuds

Créer un cluster dans le même LAN ;

Contrôlez le nombre de nœuds dans le cluster divisé, les emplacements de hachage alloués sur l'instance Redis doivent être transférés entre différentes instances, et lorsque l'instance d'équilibrage de la dette est supprimée, les données seront transférées entre différentes instances. Mais les informations sur les emplacements de hachage ne sont pas volumineuses et la migration des données est progressive, mais ce n'est pas le problème principal ;

Optimisation de la mémoire

Contrôler la longueur de la clé : Il est recommandé de définir le cahier des charges avant le développement pour s'assurer que la clé est simple et claire, et d'abréger au maximum la clé en fonction du métier.

Évitez les bigkey : la taille recommandée du type de chaîne est inférieure à 20 Ko. Il est recommandé de contrôler le seuil de hachage, list, set et zset, et il est recommandé de le contrôler dans les 5 000.

Le paramètre clé expire : utilisez pleinement la mémoire.

Choisissez la bonne structure de données

Type String, il est recommandé d'utiliser le type entier. Son encodage sous-jacent choisira un encodage entier, qui a une faible surcharge de mémoire ;

Type de hachage, il est recommandé de contrôler le seuil d'élément. Lorsqu'il y a peu d'éléments, la couche inférieure utilisera une structure de données de liste compressée, qui a une faible surcharge de mémoire, il est recommandé de contrôler le seuil d'élément. il y a peu d'éléments, la couche inférieure utilisera une structure de données de liste compressée, qui a une faible surcharge de mémoire, il est recommandé de stocker le type Integer, son codage sous-jacent choisira un codage entier et la surcharge de mémoire est faible ;

Type zset, il est recommandé de contrôler le seuil des éléments. Lorsqu'il y a peu d'éléments, la couche inférieure utilisera une structure de données de liste compressée, qui a une faible surcharge de mémoire ;

Compression des données : le client peut utiliser des algorithmes de compression tels que snappy et gzip pour compresser les données avant d'écrire sur Redis afin de réduire l'utilisation de la mémoire. Cependant, le client doit décompresser les données après avoir lu les données, ce qui consommera plus de CPU.

Activer la stratégie d'élimination de la mémoire

Mettez fin à la stratégie d'élimination de la mémoire par défaut. Veuillez choisir une stratégie d'élimination appropriée en fonction de votre activité réelle pour améliorer l'utilisation de la mémoire.

LRU : concentrez-vous sur le nombre de visites, éliminez les clés les moins récemment utilisées et disposez d'un large éventail de scénarios d'utilisation. Le LRU de Redis utilise un algorithme similaire au LRU, ajoutant un champ supplémentaire d'une longueur de 24 bits à la clé, qui est l'horodatage du dernier accès. Adoptez une méthode de traitement paresseuse : lors de l'exécution d'une opération d'écriture, si la mémoire maximale est dépassée, l'algorithme d'élimination LRU est exécuté une fois, 5 clés (le nombre peut être défini) sont échantillonnées de manière aléatoire et la clé la plus ancienne est éliminée. la mémoire maximale est toujours dépassée après l'élimination, l'élimination continuera.

LFU : Focus sur la fréquence d'accès, recommandé face à la pollution du cache.

Problème d'optimisation de la fragmentation de la mémoire

Raisons : L'une est due à la stratégie d'allocation de l'allocateur de mémoire. L'allocateur de mémoire alloue selon une taille fixe, plutôt qu'en fonction de la taille réelle demandée. Par exemple, si les octets demandés se trouvent dans les octets demandés, 32 octets le sont. effectivement alloué ; l'autre est causé par redis. Une fois la paire clé-valeur supprimée, la fragmentation de la mémoire causée par une partie de l'espace sera libérée.

Positionnement : observez l'indicateur de men_fragmentation_ratio via l'instruction INFO mémoire ; si l'indicateur est compris entre 1 et 1,5, c'est normal ; si l'indicateur est supérieur à 1,5, le taux de fragmentation de la mémoire a dépassé 50 % et la fragmentation de la mémoire doit être traité ;

Solution : redémarrez l'instance Redis ;

Activez la fonction de nettoyage automatique de la fragmentation de la mémoire de Redis.

Optimisation du disque

Construire physiquement le service redis : lors de la persistance, redis utilise la méthode de création d'un processus enfant (qui appellera le système fork du système d'exploitation), et l'environnement de la machine virtuelle met plus de temps à exécuter fork que la machine physique.

Mécanisme d'optimisation de la persistance

Ne pas activer la persistance : redis n'est utilisé que pour la mise en cache, il n'est donc pas nécessaire d'activer la persistance pour réduire la surcharge du disque ;

Optimisation AOF : traitez AOF en arrière-plan, configurez apenfsync eachec pour placer l'opération de pinceau de persistance des données dans le thread d'arrière-plan à exécuter et essayez de réduire l'impact de l'écriture Redis sur le disque sur les performances ;

Ne créez pas de persistance AOF à haute fréquence. La fréquence par défaut de la persistance AOF est d'une fois par seconde. Il n'est pas recommandé de modifier cette configuration. Cela peut déjà garantir que les données seront perdues jusqu'à 1 seconde ;

Activez la persistance hybride, redis4.0 prend en charge la persistance hybride RDB + AOF incrémentiel ;

Activer la configuration multithread. Avant Redis 6.0, la persistance était gérée via le processus enfant fork du thread principal, mais fork était bloqué de manière synchrone. Après la version 6.0, plusieurs processus sont pris en charge pour gérer les opérations de persistance ;

Optimisation du cluster

L'esclave effectue l'optimisation de la persistance : le maître n'effectue pas de persistance et partage autant que possible la pression des E/S du disque maître ; optimisation maître-esclave : mode incrémentiel, la méthode de synchronisation maître-esclave est désignée comme mode incrémentiel et le mode RDB complet ne sera pas sélectionné. Le mode complet One consomme beaucoup de performances ; en utilisant le mode de synchronisation en cascade, lorsqu'un maître a plusieurs esclaves, plusieurs esclaves viennent au maître pour synchroniser les données, ce qui réduira directement les performances du maître.

Pour ce problème, Redis prend en charge la synchronisation en cascade, c'est-à-dire que le maître synchronise uniquement les données sur une seule salve, puis les données des autres salves sont synchronisées à partir de cette salve pour soulager la pression sur le maître.

Il est recommandé que la taille réelle ne dépasse pas 6G. Si l'instance est trop volumineuse, la synchronisation maître-esclave sera bloquée et, dans les cas graves, elle fera tomber le maître.

AOF sera rejoué lors d'un redémarrage anormal. Si l'instance est trop volumineuse, la récupération des données sera anormalement lente.

Optimisation des points d'étranglement

Analyse : étant donné que Redis est monothread lors du traitement des requêtes et des instructions, son goulot d'étranglement en termes de performances est le problème de blocage de la synchronisation.

gros problème

Dangers : la lecture et l'écriture de bigkey peuvent entraîner un délai d'attente, et redis exploite les données dans un seul thread, ce qui peut sérieusement bloquer l'ensemble du service redis. De plus, une clé ne sera divisée qu’en un seul nœud, la pression du dessin ne pourra donc pas être partagée. Détection Bigkey : livré avec la commande bredis-cli-bigkeys. Redis est livré avec des instructions qui ne peuvent trouver que la plus grande clé parmi les cinq types de données, ce qui n'est pas très utile et n'est pas recommandé. script d'analyse python. Il peut localiser des clés spécifiques, mais la précision n’est pas élevée et n’est pas recommandée.

Outil rdb_bigkeys. Outil écrit en Go, il est rapide et très précis. Il peut également être directement exporté vers un fichier csv pour une visualisation et une recommandation faciles.

Optimisation : pour les bigkey de type non-chaîne, l'ensemble d'éléments peut être divisé en multiples. Par exemple, si un bigkey est divisé en 1000 clés, le suffixe de la clé sera haché modulo 1000.

Utilisez le cache local, par exemple, stockez l'ID d'entreprise + le numéro de version dans Redis, placez le contenu spécifique dans le cache local, vérifiez d'abord le cache Redis pour chaque requête, puis vérifiez le numéro de version avec le cache local.

L'optimisation de bigkey est généralement laborieuse. Il est recommandé de définir des spécifications lors du développement pour éviter les problèmes de bigkey.

Politique d'expiration

Suppression programmée : chaque clé expirée reçoit une tâche planifiée et elle est supprimée directement lorsqu'elle expire. Elle a une utilisation élevée de la mémoire et une utilisation élevée du processeur. Suppression paresseuse : lorsque la clé est interrogée, il est déterminé si la clé a expiré. Si elle a expiré, elle sera supprimée. Cela entraînera une faible utilisation du processeur et une utilisation élevée de la mémoire. Suppression périodique : analysez de temps en temps, les clés expirées sont directement supprimées et l'utilisation du processeur et de la mémoire est moyenne.

1. Stratégie gourmande. Redis définira la clé expirée dans un dictionnaire séparé.

2. Processus de numérisation. Sélectionnez 20 clés dans le dictionnaire expiré et supprimez les clés expirées parmi les 20 clés. Si la proportion de clés supprimées dépasse 1/4, répétez l’étape 1.

Sur la base de la logique ci-dessus, afin de résoudre le problème de thread bloqué en raison d'une boucle excessive, un mécanisme de délai d'attente est ajouté à l'algorithme. Le temps par défaut est de 25 ms.

3. Fréquence d'analyse : redis est par défaut de 10 analyses d'expiration par seconde.

Redis active la suppression paresseuse + la suppression régulière par défaut.

Optimisation : activez le mode paresseux et les opérations fastidieuses de libération de mémoire seront exécutées dans le thread d'arrière-plan, pris en charge par redis4.0+.

Activez le mode multi-thread. Avant Redis 6.0, la politique d'expiration était une opération synchrone du thread principal. Après la version 6.0, le multi-threading est utilisé pour le traitement.

Instructions de grande complexité

Il est recommandé d'utiliser le scan pour interroger par lots et de ne pas utiliser de clés. Non applicable aux opérations d'agrégation : redis utilise un modèle monothread pour traiter les requêtes lors de l'exécution de commandes trop complexes (consommant plus de ressources CPU), les requêtes suivantes seront mises en file d'attente et entraîneront des retards, tels que SINTER, SINTERSTORW, ZUNIONSTORE, ZINTERSTORE, etc. Il est recommandé d'utiliser scan pour connaître les éléments de la collection par lots et effectuer des calculs d'agrégation sur le client.

Opération de données de type conteneur : lorsqu'il y a trop d'éléments de type conteneur, la requête directe entraînera des retards dus au réseau. Il est recommandé d'interroger par lots.

Lorsqu'il y a trop d'éléments de conteneur, la suppression directe des clés peut entraîner le gel de Redis. Il est recommandé de les supprimer par lots.

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

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.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Comment construire le mode Cluster Redis Comment construire le mode Cluster Redis Apr 10, 2025 pm 10:15 PM

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 utiliser la commande redis Comment utiliser la commande redis Apr 10, 2025 pm 08:45 PM

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).

Comment effacer les données redis Comment effacer les données redis Apr 10, 2025 pm 10:06 PM

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.

Comment lire le code source de Redis Comment lire le code source de Redis Apr 10, 2025 pm 08:27 PM

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.

Comment lire la file d'attente redis Comment lire la file d'attente redis Apr 10, 2025 pm 10:12 PM

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.

Comment démarrer le serveur avec redis Comment démarrer le serveur avec redis Apr 10, 2025 pm 08:12 PM

Les étapes pour démarrer un serveur Redis incluent: Installez Redis en fonction du système d'exploitation. Démarrez le service Redis via Redis-Server (Linux / MacOS) ou Redis-Server.exe (Windows). Utilisez la commande redis-Cli Ping (Linux / MacOS) ou redis-Cli.exe Ping (Windows) pour vérifier l'état du service. Utilisez un client redis, tel que redis-cli, python ou node.js pour accéder au serveur.

Comment utiliser Redis Lock Comment utiliser Redis Lock Apr 10, 2025 pm 08:39 PM

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.

Comment faire du message middleware pour redis Comment faire du message middleware pour redis Apr 10, 2025 pm 07:51 PM

Redis, en tant que Message Middleware, prend en charge les modèles de consommation de production, peut persister des messages et assurer une livraison fiable. L'utilisation de Redis comme Message Middleware permet une faible latence, une messagerie fiable et évolutive.

See all articles