redis持久化机制

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持久化机制_第1张图片

触发方式

配置文件自动化触发

在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命令创建快照。

redis持久化机制_第2张图片

save命令

save是一个同步操作,
是在主进程中进行的,会阻塞redis服务,
一直到持久化完成,才能正常提供redis服务。

bgsave命令

bgsave是一个异步操作,
主进程会通过fork创建一个子进程,
用来进行持久化,完成后自动结束。
redis持久化机制_第3张图片

shutdown命令

执行shutdown命令会自动生成快照文件。

flushall命令

执行flushall命令会清空redis中的数据,并且清空dump.rdb文件。

主从复制

当从服务器连接到主服务器,
会发送一个sync命令进行一次主从复制,这个时候在主服务器触发RDB持久化。

如果系统发生崩溃,会丢失最近一次持久化到发生崩溃这段时间的数据。

AOF(append only file)

AOF会实时记录redis的每一次写操作,保存到.aof文件中,默认文件名为appendonly.aof,
通过appendonly参数开启。

redis持久化机制_第4张图片

AOF方式的三种写入策略

# appendfsync always # 每次写操作都会记入aof文件,最安全但降低redis的速度;
appendfsync everysec # 每隔1秒同步一次写操作,理论上最多只会丢失1秒的数据,是兼顾数据安全和性能的方案;
# appendfsync no     # 让操作系统决定何时同步,不推荐,会丢失不定量的数据。

redis持久化机制_第5张图片

触发方式

auto-aof-rewrite-percentage 100 # 当文件大小比上次重写后文件大小大一倍(100%);
auto-aof-rewrite-min-size 64mb  # 当文件大小不低于64MB。

两个条件同时满足才会触发。

redis持久化机制_第6张图片
也可以通过bgrewriteaof命令触发。

混合持久化

redis4.0及以上支持RDB和AOF混用的持久化方式,通过aof-use-rdb-preamble配置开启。
RDB记录的是上次持久化的数据,AOF记录从上次持久化到当前这段时间的写操作,
通常这部分文件会很小,恢复数据的时候,先加载RDB文件,再执行AOF,使效率提高。

refs:
Java架构成长之路:Redis持久化机制详解
不知努力的bd:Redis持久化机制
monkeydai:redis持久化机制

你可能感兴趣的:(hash,redis,数据库,服务器)