持久化概念

所谓持久化是指将数据从内存中以某种形式同步到硬盘中,在 redis 重启后能够根据硬盘中的记录恢复数据。
Redis 持久化有两种方式,分别为 RDB 【快照】方式 和 AOF 【日志】方式。

一. RDB 【快照】方式

当符合一定规则时,Redis 自动将内存中的所有数据生成一份副本并存储到硬盘上。分为以下四种情况:

  1. 根据配置规则自动进行快照

    SAVE  900 1
    SAVE  300 10
    SAVE  60  1000
    

    SAVE 900 1 表示 900s 内有一个或一个以上的键被更改则进行快照配置文件中

  2. 用户执行 SAVE 或 BGSAVE 命令

    (1) SAVE 命令

    Redis 会同步的进行快照操作,在快照执行过程中会阻塞所有来自客户端请求。

    (2) BGSAVE 命令

    Redis 会在后台异步地进行快照操作,在快照执行过程服务端可以继续响应来自客户端的请求

  3. 执行 FLUSHALL 命令

    只要快照配置条件不为空,执行该命令时就会执行一次快照操作;而当没有定义快照条件时,即使执行该命令也不会执行快照操作

  4. 执行复制 replication

    即使没有定义自动快照条件,且没有手动执行过快照操作,进行复制操作时也会进行自动快照

二. AOF 【日志】方式

  1. 默认关闭,通过 appendonly yes 可开启
  2. 开启后,每执行一条更改数据库中的命令时,Redis 都会将该命令写入硬盘的 AOF 文件
  3. 达到一定条件时,Redis 会自动重写 AOF 文件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  1. 启动时 Redis 会逐个执行 AOF 文件中的命令将硬盘中的数据载入到内存中
  2. appendfsync everysec 通过配置文件中的该配置项,可使硬盘缓存中的数据每 1s 同步一次到真正的硬盘中

事实上由于操作系统缓存机制,数据并没有真正写入硬盘,而是进入系统硬盘缓存。

Redis 高级特性(3)—— 持久化-LMLPHP

02-24 23:02