Maison  >  Article  >  base de données  >  Comment Redis implémente la solution de persistance (utilisée par RDB et AOF)

Comment Redis implémente la solution de persistance (utilisée par RDB et AOF)

WJ
WJavant
2020-05-30 11:51:542660parcourir

1. Le rôle de la persistance

1. Qu'est-ce que la persistance

Toutes les données enregistrées par redis In mémoire, les mises à jour des données seront enregistrées de manière asynchrone sur le disque dur

2. Comment implémenter la persistance

Snapshot : un achèvement des données à un certain moment Sauvegarde - Dump de mysql - Log d'écriture RDB de redis : toute opération est enregistrée dans le log Pour restaurer les données, il suffit de parcourir à nouveau le log - Binlog de mysql - HLog de Hhase - AOF de Redis

2. RDB

1. Qu'est-ce que RDB

Comment Redis implémente la solution de persistance (utilisée par RDB et AOF)

2. - Principalement trois méthodes

La première : save (synchronisation)

1 Le client entre la commande save----"redis server----"Création synchronisée du binaire RDB le fichier

2 provoquera le blocage de Redis (lorsque la quantité de données est très importante)

3 Stratégie de fichier : Si l'ancien RDB existe, il remplacera l'ancien

4 Complexité o(n)

Deuxième type : bgsave (asynchrone, sauvegarde Backgroud démarrée)

1 Le client entre la commande de sauvegarde ----"redis server----"asynchronous Create un fichier binaire RDB (la fonction fork génère un processus enfant (fork bloquera reids), exécutez createRDB, si l'exécution réussit, revenez au message reids)

2 Lors de l'accès à redis à ce moment, le client va répondre normalement

3 Stratégie de fichiers : Identique à la sauvegarde, si l'ancien RDB existe, il remplacera l'ancien

4 Complexité o(n)

La troisième méthode : (méthode courante) (** ****) Automatiquement (via le fichier de configuration)
Configurer les modifications en secondes
save 900 1save 300 10save 60 10000 Si 1w éléments de données sont modifiés en 60s, générer automatiquement rdb
Si 10 éléments de données sont modifiés en 300 s, générez automatiquement rdb
Si 1 élément de données est modifié en 900 s, générez automatiquement rdb

Si l'une des trois conditions ci-dessus est remplie, le rdb sera automatiquement généré et bgsave

#Configuration :

enregistrer 900 1 #Configurer un

enregistrer 300 10 #Configurer un

save 60 10000 #Configurez-en un

dbfilename dump.rdb #Le nom du fichier rdb, la valeur par défaut est dump.rdb

dir ./ #Le fichier rdb existe dans le répertoire actuel répertoire

stop-writes-on-bgsave-error yes #Si une erreur se produit dans bgsave, s'il faut arrêter l'écriture, la valeur par défaut est oui

rdbcompression yes #Utiliser le format de compression

rdbchecksum oui #Somme de contrôle du fichier rdb

#Meilleure configuration

enregistrer 900 1


enregistrer 300 10


save 60 10000 dbfilename dump-${port}.rdb


#With port Comme nom de fichier, il peut y avoir plusieurs reids sur une machine, donc ce ne sera pas déroutant

dir /bigdiskpath #Mettez le chemin de sauvegarde vers un grand répertoire d'emplacement du disque dur

stop-writes-on-bgsave-error yes

# Arrêtez-vous lorsqu'une erreur se produit

rdbcompression yes #Compression

rdbchecksum yes #Verification


Le mécanisme de déclenchement RDB utilise généralement la première. Il existe trois manières, mais cette méthode présente également des inconvénients. Si le nombre d'éléments modifiés n'est pas dans la plage définie, il ne sera pas déclenché, ce qui empêchera la conservation d'un grand nombre de données. On utilise donc généralement la méthode suivante : AOF.

Si vous souhaitez enregistrer des données sans importance, vous pouvez utiliser RDB (comme les données du cache). Si vous souhaitez enregistrer des données très importantes, vous devez utiliser AOF, mais les deux méthodes peuvent également être utilisées. en même temps.

3. AOF

1. Problème RDB

Cela prend du temps et des performances. Incontrôlable, les données peuvent être perdues.


2. Introduction à l'AOF

Chaque fois qu'une commande est écrite par le client, un journal est enregistré et placé dans le fichier journal. En cas de temps d'arrêt, les données peuvent être. complètement restauré


3. Trois stratégies d'AOF

Le journal n'est pas écrit directement sur le disque dur, mais est d'abord placé dans le tampon Le tampon est écrit sur le disque dur. selon certaines stratégies

#Premier type : toujours : redis--》Ecrire le tampon de rafraîchissement de la commande---》Fsync chaque commande sur le disque dur---》Fichier AOF

#Deuxième type : everysec (valeur par défaut) : redis——》Écrire le tampon rafraîchi par la commande---》fsync le tampon sur le disque dur toutes les secondes--》Fichier AOF

#Le troisième type : no:redis ——》Écrivez la commande de rafraîchissement Buffer ---》Décidé par le système d'exploitation, fsync le tampon sur le disque dur--》Fichier AOF

命令 always everysec no
优点 不丢失数据   
每秒一次fsync,丢失1秒数据  不用管 
缺点   
IO开销大,一般的sata盘只有几百TPS 丢1秒数据 不可控

4. Réécriture AOF

Au fur et à mesure que les commandes sont écrites et que le nombre de concurrence augmente, le fichier AOF deviendra de plus en plus gros. Ce problème peut être résolu par la réécriture AOF

原生AOF AOF重写

set hello world

set hello java

set hello hehe

incr counter

ncr counter

rpush mylist a

rpush mylist b

rpush mylist c

过期数据

set hello hehe

set counter 2

rpush mylist a b c

  

AOF natif

Réécriture AOF

set bonjour tout le monde

set bonjour java

set bonjour hehe

incr counter

ncr counter

rpush mylist a
Comment Redis implémente la solution de persistance (utilisée par RDB et AOF)rpush mylist b

rpush mylist c

Données expirées

définir bonjour hehe

définir le compteur 2

rpush ma liste a b c

命令 rdb aof
启动优先级 低   
高(挂掉重启,会加载aof的数据)   
体积 小 

恢复速度   
 快
数据安全性   
丢数据 
根据策略决定   
轻重   
重   

L'essence est de mettre des commandes expirées, inutiles et répétées qui peuvent être optimisées, optimisez cela pour réduire utilisation du disque et accélération de la récupération Méthode d'implémentationbgrewriteaof : le client envoie la commande bgrewriteaof au serveur, et le serveur démarrera un processus fork pour terminer la réécriture AOF Configuration de réécriture AOF : Processus de réécriture Fichier de configuration AOF (*** ***) appendonly yes #Définissez cette option sur yes, open appendfilename "appendonly-${port}.aof" #Le nom du fichier enregistré appendfsync toutes les secondes #Adopter la deuxième stratégie dir /bigdiskpath #Storage Le chemin no-appendfsync- on-rewrite oui #Lors de la réécriture d'aof, s'il faut effectuer l'opération d'ajout de aof, car la réécriture d'aof consomme des performances, la consommation du disque, l'écriture normale d'aof sur le disque présente certains conflits, les données pendant cette période, permettant la perte 4. Sélection de RDB et AOF1 Comparaison de rdb et aof大
Command rdb aof
Priorité de démarrage td> Faible Élevé (si vous raccrochez et redémarrez, les données aof seront chargées)
Taille Petit
Vitesse de récupération Rapide Lent
Sécurité des données Données perdues Décidé selon la stratégie
Gravité Lourd Léger

Meilleure stratégie 2.rdb

Rdb est désactivé, le fonctionnement maître-esclave est utilisé
Gestion centralisée : sauvegarde des données par jour, toutes les heures
Configuration maître-esclave, le nœud esclave est activé

3.aof meilleure stratégie

Activé : cache et stockage, ouverts dans la plupart des cas,
aof réécriture de la gestion centralisée
chaque seconde : stratégie actualisée toutes les secondes

4. Meilleure stratégie

Petit sharding : la mémoire maximale de chaque redis est de 4g
Cache ou stockage : utilisez différentes stratégies selon les caractéristiques
Surveillez le disque dur à tout moment , Mémoire, réseau de charge, etc.
Avoir suffisamment de mémoire

Ce qui précède est tout le contenu de Redis (4) - solution de persistance (utilisée par RDB et AOF).

Références associées : Site Web PHP chinois

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