🌟前言
想必大家都知道Redis是基于内存实现的数据库,那么这就出现了一个问题,如果redis重启或者断电会导致数据丢失,那么redis如何解决这个问题呢?学习完redis持久化机制,在这里分享给大家。
🌟概述
Redis持久化机制:一种用于将Redis数据存储到磁盘中,以防redis宕机或者重启后,造成数据丢失。
方式:
- RDB持久化(默认采用):简单来说,此持久化方式采用快照的形式。将redis数据在时间点内以二进制的形式保存到磁盘中,下次重启的时候重新加载该文件即可。
- AOF持久化:简单来说,此持久化方式采用日志追加的形式。将redis数据的写命令追加到日志文件的末尾。
- 混合持久化:AOF+RDB
下面具体介绍这三种持久化方式。
🌟RDB持久化
RDB持久化方式,是Redis在时间间隔内对Redis的数据进行备份,并以二进制的文件存放到磁盘中。文件的后缀名为.rdb。下次启动时,重新加载这个文件即可。这个就类似于虚拟机中的快照恢复。
主从架构下数据的同步采用的是RDB方式。从机发送sync同步操作,主机执行bgsave命令。
触发方式
1.自动RDB:Redis默认采用的是RDB持久化方式。通过以下配置进行实现
# save <seconds> <changes>。表示多少秒内有多少个被修改,触发RDB。可以配置多个 save 10 2 save 200 7 # rdbcompression yes/no.表示保存rdb时,是否压缩rdb文件,建议开启 rdbcompression yes # rdbchecksum yes/no。保存rdb文件时,是否进行文件校验和检查,以此保证数据的完整性和一致性 rdbchecksum yes # dbfilename <filename>.表示rdb文件的文件名称。默认为dump.rdb dbfilename daencode.rdb # dir <directory>.指定rdb文件的保存路径 dir /usr/local/software/redis/data/
2.手动RDB:通过命令行使用save或者bgsave命令实现。
save - 同步保存。使用此命令时Redis会阻塞redis命令执行,直到rdb过程完成。 bgsave-异步保存。使用此命令时redis会fork子进程用于执行rdb过程,主进程执行其他命令。
优点:
- 二进制文件紧凑,省略空间
- 适合全量备份,容灾恢复
- 执行速度快。
缺点:
- 快照创建期间的数据不能备份。
- 子进程存在线程开销。
🌟AOF持久化
通过日志追加的方式实现。将每次的写命令追加到日志文件末尾,恢复数据时重新载入文件。文件后缀名为.aof。中途写命令失败可以使用redis-check-aof --fix <filename>来进行修复。
核心原理是追加到aof-buf缓冲区,然后通过其追加策略进行追加。
Rewrite重写:
- AOF 重写是指通过重新生成 AOF 文件来减小 AOF 文件的体积。由于 AOF 文件会记录所有的写操作命令,随着时间的推移,AOF 文件会越来越大,可能占用大量的磁盘空间。
- 减小 AOF 文件的体积:通过重写 AOF 文件,可以去除其中的冗余命令和过期数据,从而减小 AOF 文件的体积,节省磁盘空间
- 提高读取性能:由于重写后的 AOF 文件更紧凑,读取时需要解析和执行的命令更少,从而可以提高 Redis 在载入 AOF 文件时的性能和效率。
含有rewrite的触发方式:
1.自动触发:通过以下配置,该配置包含rewrite的配置,普通aof配置文件,移出相关rewrite配置即可。
# appendonly yes/no.是否开启AOF持久化 appendonly yes # appendfilename <filename>.指定AOF文件名,默认为appendonly.aof appendfilename daencode.aof # appendfsync always/everysec/no.指定AOF文件的同步策略 # always 表示每个写命令都立即同步到磁盘 # everysec 每秒写入,默认 # no 有操作系统自行决定 appendfsync everysec # auto-aof-rewrite-percentage <percentage>。AOF文件达到当前文件百分比,自动触发重写,默认为100% auto-aof-rewrite-percentage 100 # auto-aof-rewrite-min-size <size>。AOF文件最小达到多少时,触发重写。一定要大于这个数值 auto-aof-rewrite-min-size 64mb # no-appendfsync-on-rewrite yes/no aof重写期间是否同步 no-appendfsync-on-rewrite no # aof-load-truncated yes/no .AOF加载失败或者截断时,是否加载剩余内容 aof-load-truncated yes # dir <directory>.指定aof文件的保存路径 dir /usr/local/software/redis/data/
2.手动触发:通过执行命令,手动触发rewrite的命令。
通过执行命令 bgrewriteaof
优点:
- redis持久化数据安全性更高。fsync操作更好的保证了数据不容易丢失。
- AOF文件重写机制,可以得到体积更小的aof文件。
缺点:
- 相同数据集下,AOF文件比RDB文件体积大。
- RDB文件载入速度比RDB慢。
🌟RDB+AOF持久化
RDB+AOF持久化为混合持久化,也就是两者共同使用。先使用 RDB 持久化将 Redis 的数据快照保存到一个二进制文件中,然后再启用 AOF 持久化将所有写操作追加到 AOF 文件
触发条件
# 开启混合持久化配置 aof-use-rdb-preamble yes
🌟写在最后
有关于Redis的持久化机制的知识分享到此就结束了。
感谢大家的阅读,希望大家在评论区对此部分内容散发讨论或者有什么不足之处还望提出。感谢大家!!!