Redis持久化——RDB和AOF
RDB快照模式
RDB:全称Redis Database Backup file,也叫做Redis数据快照。
简单来说就是将内存中的所有数据存到磁盘中。
快照文件称为RDB文件,默认是保存在当前运行目录,默认是dump.rdb。
1. save
由Redis主线程执行RDB,会阻塞所有命令。
2. bgsave
开启一个子线程执行RDB,避免了主线程受到影响。
3. redis.conf
Redis内部是具有RDB的触发机制的,可以通过配置redis.conf来设置
# 900秒内如果至少有一个key被修改,则执行bgsave
save 900 1
save 300 10
save 60 10000
# save "" 表示禁用RDB
save ""
# 是否开启压缩,默认是关
rdbcompression no
# RDB文件名称
dbfilename dump.rdb
# 文件保存的目录
dir ./
4. 优缺点
优点:
- 只有一个dump.rdb文件,方便持久化
- 容灾性好,一个文件可以保存到安全的磁盘中。
- 数据量大时,比AOF的启动效率更高。
缺点:
RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。
AOF追加模式
AOF: 全称为Append Only File。 Redis处理的每一个写命令都会记录在AOF文件中,也可看做是命令日志文件。
1. 开启AOF持久化
redis默认配置中AOF持久化机制是不开启的,需要在配置中开启。
# 是否开启AOF功能,默认是NO
appendonly yes
# AOF文件名称
appendfilename "appendonly.aof"
2. 设置日志追加频率
# 每执行一次命令,立即记录到AOF文件中
appendfsync everysec
# 写命令执行完先放入AOF缓冲区,然后表示每隔1s将缓冲区数据写到AOF文件,默认方案
appendfsync always
# 写命令执行完先放缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
appendfsync no
3. AOF重写
AOF文件是以追加的方式记录接收到的写命令的,而且AOF会记录对同一个key的多次写操作,但只有
最后一次写操作才有意义。
我们可以通过bgrewriteaof
命令,让AOF文件执行重写功能。
一定程度上减小AOF文件的体积,解决文件过大的问题。
# 表示AOF写入文件大小大于64m才能触发重写操作。
auto-aof-rewrite-min-size 64mb
# 100表示百分比,表示AOF文件的体积比上一次重写之后体积至少大了 “100%” 时会自动触发。
auto-aof-rewrite-percentage 100
4. 优缺点
优点:
- 数据安全,AOF持久化可以通过配置appendfsync属性,设置其记录频率。
- 通过append模式写文件,即使服务器宕机,也可以通过redis-check-aof工具解决数据一致问题。
- 更加灵活。AOF机制的 rewrite 模式,AOF文件没被rewrite之前可以删除其中的某些命令。
缺点:
- AOF文件比RDB文件更大,且回复速度更慢。
- 数据集大时,AOF比RDB启动效率低。