乐趣区

关于redis:Redis-持久化快速上手

什么是长久化?

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?

命令 save bgsave
IO 类型 同步 异步
是否阻塞 否(阻塞产生在 fork()
复杂度 O(n) O(n)
长处 不会耗费额定内存 不阻塞客户端
毛病 阻塞客户端 须要 fork,耗费内存

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

主动策略

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

默认策略:

seconds changes
900 1
300 10
60 10000

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

配置

#save 900 1
#save 300 10 
#save 60 10000
dbfilename 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?

命令 always everysec no
长处 不失落数据 每秒一次 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,并没有相对正确的答案。须要依据理论状况去作取舍。

命令 RDB AOF
启动优先级
体积
复原速度
数据安全性 丢数据 依据策略决定
级别
退出移动版