比如在单机下启动多个 Redis 服务器进程时,可以通过端口号配置不同的 RDB 名称,如下所示:
# 是否压缩rdb文件 rdbcompression yes# rdb文件的名称 dbfilename redis-6379.rdb# rdb文件保存目录 dir ~/redis/ RDB的几个优点:
- 与 AOF 方式相比,通过 RDB 文件恢复数据比较快 。
- RDB 文件非常紧凑,适合于数据备份 。
- 通过 RDB 进行数据备份,由于使用子进程生成,所以对 Redis 服务器性能影响较小 。
- 如果服务器宕机的话,采用 RDB 的方式会造成某个时段内数据的丢失,比如我们设置 10 分钟同步一次或 5 分钟达到 1000 次写入就同步一次,那么如果还没达到触发条件服务器就死机了,那么这个时间段的数据会丢失 。
- 使用 Save 命令会造成服务器阻塞,直接数据同步完成才能接收后续请求 。
- 使用 Bgsave 命令在 Forks 子进程时,如果数据量太大,Forks 的过程也会发生阻塞,另外,Forks 子进程会耗费内存 。
聊完了 RDB,来聊聊 Redis 的另外一个持久化方式:AOF(Append-only file) 。
与 RDB 存储某个时刻的快照不同,AOF 持久化方式会记录客户端对服务器的每一次写操作命令,并将这些写操作以 Redis 协议追加保存到以后缀为 AOF 文件末尾 。
在 Redis 服务器重启时,会加载并运行 AOF 文件的命令,以达到恢复数据的目的 。
文章插图
①开启 AOF 持久化方式
Redis 默认不开启 AOF 持久化方式,我们可以在配置文件中开启并进行更加详细的配置,如下面的 redis.conf 文件:
# 开启aof机制 appendonly yes# aof文件名 appendfilename "appendonly.aof"# 写入策略,always表示每个写操作都保存到aof文件中,也可以是everysec或no appendfsync always# 默认不重写aof文件 no-appendfsync-on-rewrite no# 保存目录 dir ~/redis/ ②三种写入策略
在上面的配置文件中,我们可以通过 appendfsync 选项指定写入策略,有三个选项:
appendfsync always # appendfsync everysec # appendfsync no always:客户端的每一个写操作都保存到 AOF 文件当中,这种策略很安全,但是每个写操作都有 IO 操作,所以也很慢 。
everysec:appendfsync 的默认写入策略,每秒写入一次 AOF 文件,因此,最多可能会丢失 1s 的数据 。
no:Redis 服务器不负责写入 AOF,而是交由操作系统来处理什么时候写入 AOF 文件 。更快,但也是最不安全的选择,不推荐使用 。
③AOF 文件重写
AOF 将客户端的每一个写操作都追加到 AOF 文件末尾,比如对一个 Key 多次执行 Incr 命令,这时候,AOF 保存每一次命令到 AOF 文件中,AOF 文件会变得非常大 。
incr num 1 incr num 2 incr num 3 incr num 4 incr num 5 incr num 6 ... incr num 100000 AOF 文件太大,加载 AOF 文件恢复数据时,就会非常慢,为了解决这个问题,Redis 支持 AOF 文件重写 。
通过重写 AOF,可以生成一个恢复当前数据的最少命令集,比如上面的例子中那么多条命令,可以重写为:
set num 100000 【10分钟彻底理解Redis持久化和主从复制】AOF 文件是一个二进制文件,并不是像上面的例子一样,直接保存每个命令,而使用 Redis 自己的格式,上面只是方便演示 。
两种重写方式:通过在 redis.conf 配置文件中的选项 no-appendfsync-on-rewrite 可以设置是否开启重写 。
这种方式会在每次 Fsync 时都重写,影响服务器性能,因此默认值为 no,不推荐使用 。
# 默认不重写aof文件 no-appendfsync-on-rewrite no 客户端向服务器发送 bgrewriteaof 命令,也可以让服务器进行 AOF 重写 。
# 让服务器异步重写追加aof文件命令 > bgrewriteaof AOF 重写方式也是异步操作,即如果要写入 AOF 文件,则 Redis 主进程会 Forks 一个子进程来处理,如下所示:
文章插图
重写 AOF 文件的好处:
- 压缩 AOF 文件,减少磁盘占用量 。
- 将 AOF 的命令压缩为最小命令集,加快了数据恢复的速度 。
在写入 AOF 日志文件时,如果 Redis 服务器宕机,则 AOF 日志文件文件会出格式错误 。
在重启 Redis 服务器时,Redis 服务器会拒绝载入这个 AOF 文件,可以通过以下步骤修复 AOF 并恢复数据:
推荐阅读
- 深入理解C语言的指针
- IE浏览器|全球最大看片工具彻底凉了:微软喊话让用户放弃IE使用Edge
- 一篇文章带你理解Spring框架
- “做得越多,死得越快”如何正确理解职场中的这个潜规则?
- 资深架构师总结:彻底搞懂NIO效率高的原理
- 跑步好处多,可为什么跑10分钟左右会很累?熬过后就轻松了
- 只需要2步骤便可以彻底清除垃圾 手机垃圾怎么彻底消除
- 防重复提交解决方案!史上最全原理解析!
- Java中BIO,NIO,AIO的理解
- Oracle 分页查询与数据去重深入理解