持久化方式
redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。
RDB
原理:redis数据保存在内存中,为避免数据丢失,将某个时间节点的数据快照保存至一个二进制文件(经过压缩),通过该文件可以还原生成RDB文件时的数据库状态。
它是备份整个redis内存镜像。
AOF
原理:AOF持久化通过保存redis服务器所有的写命令来记录数据库状态,服务器启动时,通过载入和执行aof保存的命令来还原服务器关闭之前的数据库状态。
AOF持久化方式
appendonly yes:表示使用aof持久化的方式
- appendfsync always:执行一个命令,持久化一次。
- appendfsync everysec:每秒钟持久化一次,故障时会丢一秒钟数据。
- appendfsync no:由系统决定什么时候持久化。
AOF重写
auto-aof-rewrite-min-size 64mb: 当文件达到64mb的时候,会重写命令,将垃圾命令丢弃,整合成最终的结果命令,提高效率。
auto-aof-rewrite-percentage 100:aof文件至上次重写后文件大小增加100%则再次触发重写。
bgrewriteaof:执行重写命令
建议
关于 AOF 和 RDB 的选择问题,三点建议:
- 数据不能丢失时,内存快照和 AOF 的混合使用是一个很好的选择;
- 如果允许分钟级别的数据丢失,可以只使用 RDB;
- 如果只用 AOF,优先使用 everysec 的配置选项,因为它在可靠性和性能之间取了一个平衡。
持久化方式对比
命令 | RDB | AOF |
---|---|---|
启动优先级 | 低 | 高 |
体积 | 小 | 大 |
恢复速度 | 快 | 慢 |
数据安全 | 容易丢数据 | 根据策略决定 |
混合持久化方式
Redis4.0之后新特性:混合持久化。
aof-use-rdb-preamble yes:设置开启混合持久化(必须先开启aof持久化方式)
数据紧凑,更加安全,恢复更快。
文件结构
在appendonly.aof文件中,既存在RDB格式(二进制),也存在AOF格式(命令)