Maison  >  Article  >  développement back-end  >  Explication détaillée de Redis RDB et AOF

Explication détaillée de Redis RDB et AOF

小云云
小云云original
2017-12-14 14:22:121757parcourir

Redis propose deux solutions de persistance, RDB (Redis DataBase) et AOF (Append Only File). Si vous souhaitez comprendre et utiliser rapidement RDB et AOF, vous pouvez accéder directement au bas de l'article pour lire le résumé. Ce chapitre utilise des fichiers de configuration, des moyens de déclencher des instantanés, des opérations de récupération de données, des démonstrations d'opérations de commande, des avantages et des inconvénients pour apprendre la persistance des connaissances clés de Redis. Cet article effectue principalement une analyse détaillée des deux solutions de persistance de Redis, RDB et AOF. Nous espérons que le contenu que nous avons compilé pourra aider chacun à mieux comprendre ces deux solutions.

Explication détaillée de RDB

RDB est la solution de persistance par défaut de Redis. Dans l'intervalle de temps spécifié, si un nombre spécifié d'opérations d'écriture est effectué, les données de la mémoire seront écrites sur le disque. Autrement dit, un fichier dump.rdb est généré dans le répertoire spécifié. Le redémarrage de Redis restaurera les données en chargeant le fichier dump.rdb.

Comprendre RDB à partir du fichier de configuration

Ouvrez le fichier redis.conf et recherchez le contenu correspondant de SNAPSHOTTING
1 Configuration des règles de base RDB (points clés)


save <seconds> <changes>
# save ""
save 900 1
save 300 10
save 60 10000

Explication : enregistrer 650d1300715f5de969fccdd2a66f77e3 ad61d0428671405647b91a5056166048, synchroniser les données de la mémoire sur le disque dur lorsque les conditions sont réunies. rencontré. La configuration d'usine officielle par défaut est que s'il y a 1 changement dans les 900 secondes, 10 changements dans les 300 secondes et 10 000 changements dans les 60 secondes, l'instantané des données en mémoire sera écrit sur le disque.

Si vous ne souhaitez pas utiliser la solution RDB, vous pouvez ouvrir le commentaire de sauvegarde "", les trois commentaires suivants.

2 Spécifiez le nom du fichier de base de données locale, généralement le dump.rdb par défaut


dbfilename dump.rdb

3 Spécifiez le stockage de la base de données locale répertoire , utilisez généralement la configuration par défaut

dir ./

4 pour activer la compression des données par défaut


rdbcompression yes

Explication : Configurez s'il faut compresser les données lors de leur stockage dans la base de données locale. La valeur par défaut est oui. Redis utilise la compression LZF, mais cela prend un peu de temps CPU. Si cette option est désactivée, le fichier de base de données deviendra volumineux. Il est recommandé de l'allumer.

Déclencher un instantané RDB

1 Effectuer le nombre spécifié d'opérations d'écriture dans l'intervalle de temps spécifié

2 Exécuter la sauvegarde (blocage, juste enregistrez l'instantané et attendez le reste) ou utilisez la commande bgsave (asynchrone)

3 pour exécuter la commande flushall afin d'effacer toutes les données de la base de données, ce qui n'a que peu d'importance.

4 Exécutez la commande shutdown pour vous assurer que le serveur est arrêté normalement sans perdre aucune donnée, ce qui n'a que peu d'importance.

Restaurer les données via des fichiers RDB

Copiez le fichier dump.rdb dans le répertoire bin du répertoire d'installation redis et redémarrez le service redis. Dans le développement réel, les dommages au disque dur de la machine physique sont généralement pris en compte et la sauvegarde dump.rdb est sélectionnée. Vous pouvez en faire l’expérience à partir de la démonstration d’opération suivante.

Avantages et inconvénients de RDB

Avantages :

1 Convient à la récupération de données à grande échelle.

2 Si l'entreprise n'a pas d'exigences élevées en matière d'intégrité et de cohérence des données, RDB est un bon choix.

Inconvénients :

1 L'intégrité et la cohérence des données ne sont pas élevées car le RDB peut avoir été en panne lors de la dernière sauvegarde.

2 Occupe la mémoire pendant la sauvegarde, car Redis créera indépendamment un sous-processus pendant la sauvegarde et écrira les données dans un fichier temporaire (à ce moment, les données en mémoire sont deux fois la taille d'origine), Enfin , remplacez le fichier de sauvegarde précédent par le fichier temporaire.

Par conséquent, il est plus raisonnable de choisir d'exécuter la persistance et la récupération de données Redis en pleine nuit.

Démonstration du fonctionnement


[root@itdragon bin]# vim redis.conf
save 900 1
save 120 5
save 60 10000
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379> set key4 value4
OK
127.0.0.1:6379> set key5 value5
OK
127.0.0.1:6379> set key6 value6
OK
127.0.0.1:6379> SHUTDOWN
not connected> QUIT
[root@itdragon bin]# cp dump.rdb dump_bk.rdb
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> FLUSHALL 
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> SHUTDOWN
not connected> QUIT
[root@itdragon bin]# cp dump_bk.rdb dump.rdb
cp: overwrite `dump.rdb&#39;? y
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
1) "key5"
2) "key1"
3) "key3"
4) "key4"
5) "key6"
6) "key2"

Étape 1 : vim modifie le temps de configuration de persistance, s'il est modifié 5 fois en 120 secondes Persister une fois.

Étape 2 : Redémarrez le service pour que la configuration prenne effet.

Étape 3 : Définissez respectivement 5 clés. Après deux minutes, un fichier dump.rdb sera automatiquement généré dans le répertoire actuel de bin. (set key6 consiste à vérifier que l'arrêt peut déclencher un instantané RDB)

Étape 4 : Faites une copie de sauvegarde du dump.rdb actuel (simulant le travail en ligne).

Étape 5 : Exécutez la commande FLUSHALL pour effacer les données de la base de données (simuler la perte de données).

Étape 6 : Redémarrez le service Redis et restaurez les données... Hein ? ? ? ? (′◔ ‸◔`). Les données sont vides ? ? ? ? En effet, FLUSHALL a également pour fonction de déclencher des instantanés RDB.

Étape 7 : Remplacez la sauvegarde dump_bk.rdb par dump.rdb puis redis.

Remarque : les commandes SHUTDOWN et FLUSHALL déclencheront des instantanés RDB. C'est un piège. Veuillez faire attention.

Autres commandes :

touches * Faire correspondre toutes les clés de la base de données save Bloquer le déclencheur RDB snapshot pour sauvegarder les données FLUSHALL Effacer les données de l'intégralité du serveur Redis (rarement utilisé) SHUTDOWN Arrêter et quitter (rarement) Utiliser)

Explication détaillée d'AOF

AOF : Redis n'est pas activé par défaut. Il semble compenser les lacunes de RDB (incohérence des données), il utilise donc la forme d'un journal pour enregistrer chaque opération d'écriture et l'ajouter au fichier. Au redémarrage de Redis, les instructions d'écriture seront exécutées d'avant en arrière en fonction du contenu du fichier journal pour terminer le travail de récupération de données.

Comprendre AOF à partir du fichier de configuration

Ouvrez le fichier redis.conf et recherchez le contenu correspondant du MODE APPEND UNIQUEMENT
1 redis est fermé par défaut Pour l'activer, vous devez. changer manuellement non en oui


appendonly yes

2 指定本地数据库文件名,默认值为 appendonly.aof


appendfilename "appendonly.aof"

 

3 指定更新日志条件


# appendfsync always
appendfsync everysec
# appendfsync no

 

解说:

always:同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差当数据完整性比较好(慢,安全)

everysec:出厂默认推荐,每秒异步记录一次(默认值)

no:不同步

4 配置重写触发机制


auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

 

解说:当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。一般都设置为3G,64M太小了。

触发AOF快照

根据配置文件触发,可以是每次执行触发,可以是每秒触发,可以不同步。

根据AOF文件恢复数据

正常情况下,将appendonly.aof 文件拷贝到redis的安装目录的bin目录下,重启redis服务即可。但在实际开发中,可能因为某些原因导致appendonly.aof 文件格式异常,从而导致数据还原失败,可以通过命令redis-check-aof --fix appendonly.aof 进行修复 。从下面的操作演示中体会。

AOF的重写机制

前面也说到了,AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多。所以聪明的 Redis 新增了重写机制。当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩。

重写的原理:Redis 会fork出一条新进程,读取内存中的数据,并重新写到一个临时文件中。并没有读取旧文件(你都那么大了,我还去读你??? o(゚Д゚)っ傻啊!)。最后替换旧的aof文件。

触发机制:当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。这里的“一倍”和“64M” 可以通过配置文件修改。

AOF 的优缺点

优点:数据的完整性和一致性更高

缺点:因为AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢。

操作演示


[root@itdragon bin]# vim appendonly.aof
appendonly yes
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set keyAOf valueAof
OK
127.0.0.1:6379> FLUSHALL 
OK
127.0.0.1:6379> SHUTDOWN
not connected> QUIT
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
1) "keyAOf"
127.0.0.1:6379> SHUTDOWN
not connected> QUIT
[root@itdragon bin]# vim appendonly.aof
fjewofjwojfoewifjowejfwf
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> QUIT
[root@itdragon bin]# redis-check-aof --fix appendonly.aof 
&#39;x    3e: Expected prefix &#39;*&#39;, got: &#39;
AOF analyzed: size=92, ok_up_to=62, diff=30
This will shrink the AOF from 92 bytes, with 30 bytes, to 62 bytes
Continue? [y/N]: y
Successfully truncated AOF
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
1) "keyAOf"

第一步:修改配置文件,开启AOF持久化配置。

第二步:重启Redis服务,并进入Redis 自带的客户端中。

第三步:保存值,然后模拟数据丢失,关闭Redis服务。

第四步:重启服务,发现数据恢复了。(额外提一点:有教程显示FLUSHALL 命令会被写入AOF文件中,导致数据恢复失败。我安装的是redis-4.0.2没有遇到这个问题)。

第五步:修改appendonly.aof,模拟文件异常情况。

第六步:重启 Redis 服务失败。这同时也说明了,RDB和AOF可以同时存在,且优先加载AOF文件。

第七步:校验appendonly.aof 文件。重启Redis 服务后正常。

补充点:aof 的校验是通过 redis-check-aof 文件,那么rdb 的校验是不是可以通过 redis-check-rdb 文件呢???

总结 Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁盘中。 RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。 Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。

AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。 Redis 针对 AOF文件大的问题,提供重写的瘦身机制。若只打算用Redis 做缓存,可以关闭持久化。若打算使用Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。

相关推荐:

深入剖析 redis RDB 持久化策略

Redis的持久化--RDB的工作原理及引发的问题

深入剖析 redis 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:
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