Maison > Article > base de données > Que dois-je faire si Redis est en panne ?
Nous savons tous que toutes les données Redis sont en mémoire. En cas de temps d'arrêt soudain, toutes les données seront perdues. Alors, comment devrions-nous le résoudre ?
Par conséquent, il doit y avoir un mécanisme pour garantir que les données Redis ne seront pas perdues en raison de pannes. Ce mécanisme est le mécanisme de persistance de Redis. (Apprentissage recommandé : Tutoriel vidéo Redis)
Redis a deux mécanismes de persistance, le premier est un instantané et le second est un journal AOF. Un instantané est une sauvegarde complète et un journal AOF est une sauvegarde incrémentielle continue. Les instantanés sont des formes binaires sérialisées de données de mémoire et sont très compacts en termes de stockage, tandis que les journaux AOF enregistrent le texte d'enregistrement des instructions des modifications des données de mémoire. Les journaux AOF deviendront extrêmement volumineux lors d'un fonctionnement à long terme. Lorsque la base de données est redémarrée, les journaux AOF doivent être chargés pour la réexécution des commandes, ce qui prendra un temps extrêmement long. Par conséquent, les journaux AOF doivent être réécrits régulièrement pour réduire leur taille. Journaux AOF.
Principe de l'instantané
Nous savons que Redis est un programme monothread. Ce thread est responsable des opérations de lecture et d'écriture simultanées de plusieurs sockets clients et structures de données mémoire. en même temps une lecture et une écriture logiques.
Lors de la demande sur la ligne de service, Redis doit également effectuer des instantanés de mémoire. Les instantanés de mémoire nécessitent que Redis effectue des opérations d'E/S sur les fichiers, mais les opérations d'E/S sur les fichiers ne peuvent pas utiliser l'API de multiplexage.
Cela signifie que même si un seul thread effectue une requête sur la ligne de service, il doit également effectuer des opérations d'E/S sur les fichiers, et les opérations d'E/S sur les fichiers ralentiront considérablement les performances des requêtes du serveur.
Il existe un autre problème important. Afin de ne pas bloquer le commerce en ligne, Redis doit persister tout en répondant aux demandes des clients. Pendant la persistance, la structure des données de la mémoire continue de changer. Par exemple, un grand dictionnaire de hachage est conservé, mais une requête arrive et le supprime, mais il n'a pas encore été conservé.
Redis utilise le mécanisme multi-processus COW (Copy On Write) du système d'exploitation pour obtenir la persistance des instantanés. Ce mécanisme est très intéressant et peu de gens le connaissent.
Principe AOF
Le journal AOF stocke la séquence d'instructions séquentielles du serveur Redis. Le journal AOF enregistre uniquement les instructions qui modifient la mémoire.
En supposant que le journal AOF enregistre toutes les séquences d'instructions modifiées depuis la création de l'instance Redis, alors Redis peut être restauré en exécutant séquentiellement toutes les instructions sur une instance Redis vide - c'est-à-dire en "rejouant" l'état du les structures de données en mémoire de l’instance actuelle.
Redis effectuera la vérification des paramètres et le traitement logique après avoir reçu la commande de modification du client. S'il n'y a pas de problème, le texte de la commande sera immédiatement stocké dans le journal AOF. En d'autres termes, la commande sera exécutée en premier. Sauvegarde du journal. Ceci est différent des moteurs de stockage tels que leveldb et hbase, qui stockent d'abord les journaux puis effectuent un traitement logique.
Pendant le fonctionnement à long terme de Redis, le journal AOF deviendra de plus en plus long. Si l'instance plante et est redémarrée, la relecture de l'intégralité du journal AOF prendra beaucoup de temps, ce qui empêchera Redis de fournir des services externes pendant une longue période. Par conséquent, le journal AOF doit être allégé.
Pour plus d'articles techniques liés à Redis, veuillez visiter la colonne Introduction au didacticiel d'utilisation de la base de données Redis pour apprendre !
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!