Maison  >  Article  >  base de données  >  Comment résoudre le débordement de tampon Redis

Comment résoudre le débordement de tampon Redis

王林
王林avant
2023-06-03 20:13:411081parcourir

    Buffer fait partie de l'espace mémoire. En d'autres termes, une certaine quantité d'espace de stockage est réservée dans l'espace mémoire. Cet espace de stockage est utilisé pour mettre en mémoire tampon les données d'entrée ou de sortie. Cet espace réservé est appelé tampon.

    1. Impact du débordement de tampon Redis

    Dans Redis, il existe trois scénarios principaux dans lesquels le concept de tampon est utilisé.

    Lors de la communication entre le client et le serveur, il est utilisé pour stocker temporairement les données de commande envoyées par le client ou les résultats des données renvoyées par le serveur au client lors de la synchronisation des données entre les nœuds maître et esclave, Redis utilise des tampons. Pour stocker temporairement les commandes d'écriture et les données reçues par le nœud maître, lorsque Redis effectue la persistance AOF, Redis utilise également le concept de tampons pour éviter les écritures fréquentes sur le disque

    Le concept de tampon a été utilisé à l'origine par le système d'exploitation pour atténuer l'incohérence entre Les vitesses des processeurs et des périphériques d'E/S sont introduites pour améliorer le parallélisme des processeurs et des périphériques d'E/S.

    L'inadéquation entre les appareils à haut débit et les appareils à faible débit amènera inévitablement les appareils à haut débit à passer du temps à attendre les appareils à faible débit. Le concept de tampon peut très bien résoudre ce problème. Le tampon est également une incarnation importante du modèle producteur-consommateur.

    Comment résoudre le débordement de tampon Redis

    1. Le débordement de tampon entraîne la fermeture de la connexion réseau

    Si qubf-free est épuisé, cela entraînera un débordement du tampon d'entrée client. La méthode de traitement de Redis consiste à fermer la connexion client, et le résultat sera un. programme métier L'accès aux données n'est pas possible.

    2. Un débordement de tampon entraîne une perte ou un crash des données de commande

    Normalement, il existe de nombreuses connexions client lorsque la quantité totale de mémoire occupée par les connexions client dépasse la configuration de mémoire maximale de Redis, l'obsolescence des données affecte l'accès. performance des programmes commerciaux.

    Même plusieurs clients entraîneront une consommation trop importante de mémoire par Redis et peuvent également provoquer des problèmes de dépassement de mémoire, ce qui peut entraîner le blocage de Redis.

    2. Tampon client

    Il existe deux autres tampons client, le tampon d'entrée et le tampon de sortie, tous deux configurés pour résoudre l'inadéquation des vitesses d'envoi et de traitement des requêtes entre le client et le serveur.

    Comment résoudre le débordement de tampon Redis

    Le tampon d'entrée stocke temporairement les commandes envoyées par le client. Il existe deux raisons courantes de débordement :

    L'écriture de BigKey, comme l'écriture de millions de hachages ou la définition de données à la fois, dépasse la taille du tampon, le serveur. traite la demande trop lentement, provoquant un blocage et étant incapable de traiter la demande à temps, provoquant l'accumulation de plus en plus de demandes envoyées par le client dans le tampon.

    Le tampon de sortie stocke temporairement les données à renvoyer au client par le thread principal Redis.

    Ces données incluent des réponses OK simples et de taille fixe (par exemple, l'exécution de la commande SET) ou des messages d'erreur, ainsi que des résultats d'exécution de tailles variables et contenant des données spécifiques (par exemple, l'exécution de la commande HGET)

    Sortie commune buffers Il existe trois raisons de débordement :

    Renvoyer un grand nombre de résultats BigKey Exécuter certaines commandes déraisonnables Paramètre de taille de tampon déraisonnable

    À en juger par les causes courantes de débordement dans les tampons d'entrée et de sortie, BigKey est la cause la plus probable du débordement. , nous devrions donc essayer d'éviter d'utiliser BigKey.

    Pour le buffer d'entrée, comme il n'y a aucun moyen de changer sa taille (par défaut 1G par client), on ne peut contrôler que la vitesse d'envoi et de traitement des commandes pour éviter au maximum le blocage.

    Pour le tampon de sortie, évitez d'utiliser certaines commandes qui renvoient un grand nombre de résultats comme KEYS, MONITOR, etc. En même temps, vous pouvez éviter les débordements en ajustant la taille du tampon de sortie.

    3. Tampon de copie

    Le tampon de copie est utilisé pour la copie entre les nœuds maître et esclave Redis. Parce que la réplication des données entre les nœuds maître et esclave inclut la réplication complète et la réplication incrémentielle. Par conséquent, le tampon de copie est également divisé en deux types : le tampon de copie et le tampon de retard de copie.

    1. Tampon de copie

    Pendant le processus de réplication complet, le nœud maître continuera à recevoir les demandes de commandes d'écriture envoyées par le client tout en transmettant les fichiers RDB au nœud esclave. Ces commandes d'écriture seront d'abord enregistrées dans le tampon de réplication, puis envoyées au nœud esclave et exécutées une fois le transfert du fichier RDB terminé. Afin d'assurer la synchronisation des données entre les nœuds maître et esclave, chaque nœud esclave maintient un tampon de réplication sur le nœud maître.

    Comment résoudre le débordement de tampon Redis

    Pour le tampon de copie, s'il faut beaucoup de temps à la bibliothèque principale pour transmettre les fichiers RDB et charger les fichiers RDB à partir de la bibliothèque esclave, et en même temps, la bibliothèque principale reçoit de nombreuses opérations de commandes d'écriture, cela entraînera le remplissage et le débordement du tampon de copie.

    Pour éviter le débordement du tampon de réplication, d'une part, nous pouvons contrôler la quantité de données enregistrées par le nœud maître, ce qui peut accélérer le transfert des fichiers RDB et le temps de chargement des bibliothèques esclaves pour éviter l'accumulation de trop de commandes dans le tampon de réplication.

    Vous pouvez également définir la taille du tampon de réplication de manière plus raisonnable pour éviter le débordement en fonction du volume de données du nœud maître, de la pression de charge d'écriture du nœud maître et de la taille de la mémoire du nœud maître lui-même pour éviter le débordement. puisque le nœud maître le définira pour chaque nœud esclave. Pour un tampon de réplication, s'il y a de très nombreux nœuds esclaves dans le cluster, la surcharge mémoire du nœud maître sera très importante, nous devrions donc essayer d'éviter d'avoir trop de nœuds esclaves. pour un nœud maître.

    2. Tampon de retard de réplication

    Pendant le processus de réplication incrémentielle, lorsque le nœud maître et le nœud esclave effectuent une synchronisation régulière, la commande d'écriture sera temporairement stockée dans le tampon de réplication. Si une déconnexion du réseau se produit entre le nœud esclave et le nœud maître, les opérations de commande qui n'ont pas encore été répliquées peuvent être synchronisées à partir du tampon de retard de réplication après la reconnexion du nœud esclave.

    Comment résoudre le débordement de tampon Redis

    Il est à noter que le tampon de backlog de copie est un tampon en anneau de taille limitée.

    Lorsque le nœud maître remplit le tampon du backlog de réplication, il écrasera les anciennes données de commande dans le tampon. À ce stade, les données des nœuds maître et esclave seront incohérentes.

    En réponse à ce problème, la solution générale consiste à augmenter la taille du tampon du backlog de copie. La méthode de calcul de cette taille peut généralement être utilisée

    缓冲区大小=(主库写入命令速度 * 操作大小 - 主从库间网络传输命令速度 * 操作大小)* 2

    Si le nombre de requêtes simultanées est très important, il est impossible d'ajuster la taille du tampon. résolvez le problème. Ensuite, vous pouvez envisager d'utiliser des clusters de découpage pour le résoudre

    4. Tampon AOF

    Le tampon AOF est le tampon défini par Redis pour la persistance AOF. Le tampon AOF a également deux types de tampons AOF et de tampons de réécriture AOF.

    1. Tampon AOF

    Nous savons tous que même pour les disques SSD, sa vitesse de lecture et d'écriture est très différente de celle de la mémoire. Le tampon AOF est principalement défini par Redis pour résoudre le problème de synchronisation entre la vitesse d'exécution des commandes du processus principal et la vitesse d'écriture du disque. Le tampon AOF peut efficacement éviter la lecture et l'écriture fréquentes du disque dur, améliorant ainsi les performances. Lors de l'exécution de la persistance AOF, Redis écrira d'abord la commande dans le tampon AOF, puis l'écrira dans le fichier AOF du disque dur conformément à la politique de réécriture.

    Comment résoudre le débordement de tampon Redis

    Le débordement du tampon AOF peut être lié à la vitesse d'écriture du disque, ou il peut être lié à la stratégie de réécriture AOF lorsqu'un grand nombre de commandes sont en retard dans le tampon AOF et dépassent son seuil défini. , un débordement de tampon se produira. , pour éviter ce problème, nous pouvons le résoudre en ajustant la stratégie de réécriture ou en ajustant la taille du tampon AOF.

    2. Tampon de réécriture AOF

    Le tampon de réécriture AOF est le moment où Redis effectue une réécriture AOF dans le processus enfant. Lorsque le processus parent accepte une nouvelle commande, la commande sera écrite dans le tampon de réécriture AOF. la réécriture du processus est terminée, ajoutez la commande AOF rewrite buffer au nouveau fichier AOF.

    Comment résoudre le débordement de tampon Redis

    Le débordement du tampon de réécriture AOF est lié au nombre de commandes traitées par le processus principal lors de la réécriture AOF. Lorsque le processus principal Redis traite un grand nombre de commandes lors de la réécriture AOF, ces commandes seront écrites dans le fichier. Zone tampon de réécriture AOF, lorsque le seuil défini est dépassé, un débordement se produit.

    Pour éviter le débordement du tampon de réécriture AOF, nous pouvons également le résoudre en ajustant la taille du tampon de réécriture AOF.

    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:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer