Maison  >  Article  >  base de données  >  Explorez les principes de persistance de Redis

Explorez les principes de persistance de Redis

angryTom
angryTomavant
2020-02-22 16:18:442466parcourir

Explorez les principes de persistance de Redis

Exploration approfondie du principe de persistance de Redis

Redis est une base de données en mémoire Dans l'ordre. pour assurer la persistance des données, redis Fournit deux méthodes de persistance, RDB et AOF,

Redis est une base de données en mémoire Afin d'assurer la persistance des données, redis. fournit deux méthodes de persistance, RDB et AOF , examinons séparément les principes de mise en œuvre de ces deux méthodes de persistance.

RDB (par défaut)

RDB est complété via des instantanés Lorsque certaines conditions sont remplies, redis conservera automatiquement les données de la mémoire sur le disque.

Le moment du déclenchement de l'instantané

  • est conforme aux règles d'instantané configurées personnalisées. (Configuré dans redis.conf, détaillé ci-dessous)
  • Exécutez la commande save ou bgsave
  • Exécutez la commande flushall
  • Exécutez l'opération de réplication maître-esclave (en premier fois)

(Recommandation de didacticiel vidéo d'apprentissage gratuit : Tutoriel vidéo MySQL)

Diagramme schématique

Explorez les principes de persistance de Redis

  • Pendant le processus de capture d'instantané, c'est-à-dire le processus de génération de fichiers, le fichier rdb d'origine ne sera pas modifié jusqu'à ce que l'instantané soit généré, l'ancien sera directement remplacé par le nouveau pour garantir. que le fichier rdb Chaque instant est terminé.
  • Nous pouvons sauvegarder les données Redis en sauvegardant régulièrement les fichiers rdb. RDB est un fichier binaire compressé qui prend peu de place et est propice à la transmission

###Règles de configuration des instantanés. save {Combien de secondes} {Combien de données ont été modifiées>

Par exemple : save 100 1 : Dans les 100 secondes, prenez un instantané si au moins une clé est modifiée. save 200 4 : Dans les 200 secondes, à ; minimum 4 Prendre un instantané lorsque la clé est modifiée.

Avantages et inconvénients de RDB

  • Inconvénients : en utilisant RDB pour la persistance, lorsque Redis se ferme soudainement et anormalement, les données après le dernier instantané seront perdues. Cependant, vous pouvez configurer des instantanés automatiques basés sur la combinaison pour réduire la perte de données et garantir qu'elle se situe dans la plage acceptable. Si les données sont plus importantes, vous pouvez utiliser la méthode AOF
  • Avantages : L'utilisation de la méthode RDB peut maximiser les performances de Redis. Pendant le processus d'instantané, nous pouvons voir que le processus principal n'a besoin que de débourser un processus enfant. , et le reste Tout le travail est effectué par le processus enfant et le processus parent n'a pas besoin d'effectuer d'opérations d'E/S disque. Cependant, si l'ensemble de données est volumineux, la duplication du processus enfant prendra beaucoup de temps, ce qui entraînera l'arrêt de Redis de traiter les demandes pendant un certain temps.

Méthode AOF

Par défaut, redis n'active pas AOF (ajouter uniquement un fichier). Après avoir démarré AOF, chaque fois que redis reçoit une commande pour modifier les données redis, il écrira la commande dans le fichier AOF sur le disque dur. Évidemment, ce processus réduira les performances de Redis, mais il est acceptable dans la plupart des cas, en même temps, l'utilisation d'un disque dur plus performant peut améliorer les performances d'AOF

Méthode de configuration d'AOF

# 开启appendonly参数appendonly true# 设置AOF文件位置dir ./# 设置AOF文件名称,默认是appendonly.aofappendfilename appendonly.aof<br/>
Figure de principe

Explorez les principes de persistance de Redis

Protocole RESP

Le client Redis utilise le protocole RESP pour communiquer avec le serveur Redis. Ce protocole est spécialement conçu pour Redis, mais il peut également l'être. utilisé dans d’autres projets CS.

    Symbole d'espacement : rn sous Linux, n sous Windows
  • Chaîne simple commence par '+'
  • Erreurs, commence par '-' Commençant par
  • Type entier Entier, commençant par ':'
  • Grande chaîne commençant par '$'
  • Type de tableau Tableaux, commençant par '*'
AOF Description du principe

redis conserve les données en enregistrant toutes les commandes d'écriture dans des fichiers AOF. Le processus d'enregistrement des commandes dans les fichiers AOF peut être divisé en trois étapes :

    Propagation des commandes
  • Ajout du cache
  • Écriture et sauvegarde des fichiers
Propagation des commandes

redis enverra la commande exécutée, les paramètres de commande, le numéro de grille des paramètres de commande et d'autres contenus au programme AOF. Lorsque le client Redis exécute une commande, il envoie le texte du protocole à Redis via la connexion. Une fois que Redis a reçu le texte du protocole, il sélectionne la fonction de commande appropriée en fonction du contenu et convertit le texte du protocole en un objet chaîne Redis. La fonction est exécutée, après cela, envoyez les paramètres de commande au programme AOF.

缓存追加

AOF程序接收到命令参数之后,会将其从字符串对象转换成协议内容,再将协议内容追加到AOF缓存中。AOF缓存是在redisServer结构的aof_buf中,新的内容会被追加到aof_buf末尾。aof_buf保持着所有未被写入到AOF文件的协议文本。

文件写入和保存

将AOF缓存内容写入到AOF文件,并保持到磁盘。 当服务器的常规函数被执行,或者事件处理器被执行的时候,flushAppendOnlyFile函数将会被执行。会有以下两个过程。

  • WRITE:将AOF缓存中的内容写入到AOF文件
  • SAVE:调用fsync或者fdatasync函数,将AOF文件保存到磁盘中

AOF一共有三种保存模式

  • AOF_FSYNC_NO:不保存。在这种模式下,每次调用flushAppendOnlyFile函数,write会被执行,而save会被忽略。而save只有在以下三种条件下会触发,redis关闭,aof功能关闭,系统的写缓存被刷新(可能是缓存满了,或者定期执行保持操作)。这三种情况下执行save操作会引起redis主线程的阻塞。
  • AOF_FSYNC_EVERYSEC(默认):每秒保存一次。save每秒被执行一次,但是save由后台子线程完成,不会导致redis主线程阻塞。
  • AOF_FSYNC_ALWAYS:每执行一个命令保存一次。这种情况下,每执行一个命令write和save都会被执行,而且save操作由主线程完成,会导致redis的阻塞。安全性较高,性能较差,因此不推荐使用。

AOF的文件优化

Redis可以在AOF文件过大的时候,在后台(子进程)对AOF文件进行重写。重写之后的新文件,包含恢复当前数据集所需的最小命令集合。重写,并不会对AOF文件进行读取和写入,针对的是数据库中的当前键。

优化前set s1 1set s1 2set s1 3优化后set s1 3<br/>

AOF文件优化原理

AOF的重写是通过子进程实现的,因此,主线程是继续工作的,有可能对新的数据进行修改,有可能会导致数据库的数据和重写之后的数据不一致。redis通过增加一个AOF重写缓存来解决这个问题,当fork出子进程之后,新的命令不仅会追加到现有的AOF文件中,还会添加一份数据到这个缓存当中。

Explorez les principes de persistance de Redis

重写过程分析(需要保证从写的操作是绝对安全的)

Redis创建新的AOF文件之后,会继续将命令添加到原有的AOF文件中,即使数据库突然宕机了,原有的AOF文件和文件内容也不会有损失。而当新的AOF文件创建完毕之后,会直接把旧的替换掉,往新的AOF文件中添加命令。

当子进程在进行重写时,主进程会完成下列工作

  • 处理请求,将新的命令继续添加到AOF文件中,同时将命令添加到AOF重写缓存中。保证数据的一致行,避免出现数据丢失。
  • 当子进程重写完毕之后会向主进程发送一个完成信号,这时主进程会把重写缓存中的内容添加到新的AOF文件中,这样新的AOF文件,数据库,旧的AOF文件的内容就完全一致了。然后对新的AOF文件改名,覆盖原有的AOF文件。

这样程序就完成了新旧AOF文件的替换工作。而当处理完成之后,主进程就会继续接受请求。整个重写过程中只有最后的缓存写入和改名替换的操作会导致主进程阻塞,其他时候不会影响redis的正常工作,把AOF重写对redis的性能影响降到最低。

优化触发条件

#当前的AOF文件超过上次重写时AOF文件大小百分几的时候进行重写,如果没有重写过,则以启动时AOF文件的大小为准auto-aof-rewrite-percentage 100#限制允许重写的最小的AOF文件,也就是文件小于这个值的时候不需要进行重写优化auto-aof-rewrite-min-size 64mb<br/>

本文转载自:https://database.51cto.com/art/202002/610825.htm

更多redis知识请关注redis数据库教程栏目。 

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