redis持久化机制
- RDB(redis database)
- 触发方式
- 配置文件自动化触发
- save命令
- bgsave命令
- shutdown命令
- flushall命令
- 主从复制
- AOF(append only file)
- AOF方式的三种写入策略
- 触发方式
- 混合持久化
redis默认的持久化机制是RDB。
redis是常驻内存的数据库,
将数据持久化到磁盘上是很有必要的,否则一旦宕机或重启,数据就会丢失。
redis的持久化方式有三种。
RDB(redis database)
每隔一段时间会把当前内存中的数据生成一个快照(.rdb)文件,保存在磁盘上,
以二进制的形式,体积小,默认文件名dump.rdb,RDB是redis默认采用的持久化方式。
触发方式
配置文件自动化触发
在redis.conf中有如下配置:
save 900 1 # 在900秒后,如果有至少1个key发生变化,redis会触发bgsave命令创建快照;
save 300 10 # 在300秒后,如果有至少10个key发生变化,redis会触发bgsave命令创建快照;
save 60 10000 # 在60秒后,如果有至少10000个key发生变化,redis会触发bgsave命令创建快照。
save命令
save是一个同步操作,
是在主进程中进行的,会阻塞redis服务,
一直到持久化完成,才能正常提供redis服务。
bgsave命令
bgsave是一个异步操作,
主进程会通过fork创建一个子进程,
用来进行持久化,完成后自动结束。
shutdown命令
执行shutdown命令会自动生成快照文件。
flushall命令
执行flushall命令会清空redis中的数据,并且清空dump.rdb文件。
主从复制
当从服务器连接到主服务器,
会发送一个sync命令进行一次主从复制,这个时候在主服务器触发RDB持久化。
如果系统发生崩溃,会丢失最近一次持久化到发生崩溃这段时间的数据。
AOF(append only file)
AOF会实时记录redis的每一次写操作,保存到.aof文件中,默认文件名为appendonly.aof,
通过appendonly参数开启。
AOF方式的三种写入策略
# appendfsync always # 每次写操作都会记入aof文件,最安全但降低redis的速度;
appendfsync everysec # 每隔1秒同步一次写操作,理论上最多只会丢失1秒的数据,是兼顾数据安全和性能的方案;
# appendfsync no # 让操作系统决定何时同步,不推荐,会丢失不定量的数据。
触发方式
auto-aof-rewrite-percentage 100 # 当文件大小比上次重写后文件大小大一倍(100%);
auto-aof-rewrite-min-size 64mb # 当文件大小不低于64MB。
两个条件同时满足才会触发。
也可以通过bgrewriteaof命令触发。
混合持久化
redis4.0及以上支持RDB和AOF混用的持久化方式,通过aof-use-rdb-preamble配置开启。
RDB记录的是上次持久化的数据,AOF记录从上次持久化到当前这段时间的写操作,
通常这部分文件会很小,恢复数据的时候,先加载RDB文件,再执行AOF,使效率提高。
refs:
Java架构成长之路:Redis持久化机制详解
不知努力的bd:Redis持久化机制
monkeydai:redis持久化机制