什么是长久化?

Redis 所有数据都是存储在内存中的,对于数据的更新将异步的保留在磁盘中,当Redis实例重启时,即可利用之前长久化的文件实现数据恢复。

支流数据库的长久化形式:

  • 快照

    • Mysql dump
    • Redis rdb
  • 日志

    • Mysql binlog
    • Redis aof

RDB

什么是RDB?

Redis 通过一条命令或者某种形式创立 rdb 文件,该文件是二进制格局,存储在硬盘中。

当须要对Redis 进行复原时,就能够去加载该文件。

数据恢复的水平,取决于 rdb文件(快照)产生的时刻。

三种触发机制

Redis 生成 rdb 文件有三种形式,别离是:

  • save
  • bgsave
  • 主动策略

save

save 命令有如下特点:

  1. 同步阻塞
  2. 文件策略:如果存在旧的rdb 文件,则会替换成新的
  3. 复杂度:O(N)

bgsave

bgsave 命令有如下特点:

  • 异步非阻塞(简直不会阻塞客户端)
  • 文件策略和复杂度同上。
save 还是 bgsave?
命令savebgsave
IO类型同步异步
是否阻塞否(阻塞产生在fork()
复杂度O(n)O(n)
长处不会耗费额定内存不阻塞客户端
毛病阻塞客户端须要fork,耗费内存

在数据量不大的状况下,其实应用save 还是bgsave 并没有什么差别。

主动策略

主动生成策略是依据某个规定来决定是否生成 rdb 文件,这个过程也是一个bgsave 的过程。

默认策略:

secondschanges
9001
30010
6010000

上述配置的意思是:如果在60s 中做了10000 次扭转或者在 300s 中做了 10次 扭转,或者在900s 中做了 1 次扭转,则均会触发bgsave。

配置

#save 900 1#save 300 10 #save 60 10000dbfilename dump-${port}.rdb       // rdb 文件名称dir /big_disk_path                // 工作目录stop-writes-on-bgsave-error yes   // 如果产生谬误,进行写入rdbcompression yes                // 采纳压缩格局 rdbchecksum yes                   // 对rdb 文件进行测验

触发机制

Redis 当达到以下触发机制时,也会主动创立rdb 文件。

  1. 全量复制
  2. debug reload
  3. showdown

AOF

在正式介绍什么是AOF 之前,咱们先来理解一下RDB 形式现存的问题。

  1. 耗时、耗性能
  2. 不可控、失落数据

什么是AOF?

Redis 的每次操作都会产生日志,AOF 文件能够了解成记录操作内容。
AOF(append only file) 其实就是依据Redis 的执行日志去创立AOF 文件。

三种策略

Redis 在执行写命令时,首先写入硬盘的缓冲区,缓冲区会依据以下策略去刷新到磁盘中。

  • always:每条命令 fsync 到硬盘。
  • everysec:每秒把缓冲区 fsync 到硬盘。
  • no:由零碎决定是否 fsync。
always 还是 everysec 还是 no?
命令alwayseverysecno
长处不失落数据每秒一次 fsync不必管
毛病IO 开销较大,个别的sata 盘只有几百 TPS丢一秒数据不可控

配置

appendonly yes                              // 开启AOF 策略appendfilename "appendonly-${port}.aof"     // aof 文件名appendfsync everysec                        // 刷新策略dir /big_disk_path                          // 工作目录no-appendfsync-on-write  yes                // AOF 重写时,是否须要做AOF 失常操作auto-aof-rewrite-percentage 100             // 重写增长率auto-aof-rewrite-min-size 64mb              // 重写最小存储

总结

对于到底抉择RDB 还是AOF,并没有相对正确的答案。须要依据理论状况去作取舍。

命令RDBAOF
启动优先级
体积
复原速度
数据安全性丢数据依据策略决定
级别