Redis - 持久化

in Tech Redis

简介

Redis 是一个内存数据库,当服务器重启之后内存中的数据都会丢失。所以对 Redis 来说,持久化显得尤为重要。
Redis 有两种持久化方式:一种为 RDB 方式,保存指定时间间隔的数据;另一种为 AOF 方式,保存的是 Redis 服务器端执行的每个写命令。

RDB

有两种触发方式:

  1. 在配置文件中写入如下配置
    save 60 1000 #意味着如果在60秒内至少有1000个key发生变化,则自动将数据存储到磁盘。
  2. 也可以在客户端显式调用 SAVEBGSAVE 命令将数据存储到磁盘。

优点:

缺点:

AOF

AOF 的开启需在配置文件中写入如下配置

    appendonly yes

由于将大量数据写入磁盘速度相对较慢,所以 Redis 提供 appendfsync 配置控制执行 fsync 的频率。
有如下3种策略:

  1. no:不执行 fsync,由操作系统负责数据的刷盘。Linux 通常每30秒刷新一次数据,数据安全性最低但 Redis 性能最高。
  2. always:每执行一次写入就会执行一次 fsync。数据安全性最高但会导致 Redis 性能降低。
  3. everysec:每1秒执行一次 fsync 操作。至多丢失1秒钟的数据。生产环境比较常见的选择。也是默认策略

优点:

缺点:

AOF 重写

AOF 重写就是直接将特定时间内的特定指令进行合并,既可以减小文件大小,又可以提高加载速度。

 rpush list 1 2 3
 rpush list 4
 rpush list 5
 lpop  list

按顺序执行如上命令后 list 中的数据为 2,3,4,5 。AOF 文件则存储了上述四条指令。AOF 重写之后则变成一条指令 rpush list 2 3 4 5

AOF 重写有两种触发方式:

RDB + AOF 混合持久化

混合持久化的开启需在配置文件中写入如下配置

aof-use-rdb-preamble yes