1、Redis 持久化

1.1 什么是持久化

  持久化可以理解为数据的永久存储,就是将数据存储到一个不会丢失的地方。如果把数据放在内存中,电脑关闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就是一种持久化。

 

1.2 Redis 的持久化

  Redis 的数据存储在内存中,内存是瞬时的,如果系统宕机或重启,又或者 Redis崩溃或重启,所有内存数据都会丢失。为解决这个问题,Redis 提供两种机制对数据进行持久化存储,以便发生故障后能迅速恢复数据。

  Redis 提供了两种数据持久化有方式:

  (1) RDB:redis database backup file,是 redis 默认的持久化方式

  (2)AOF:append of file

 

2、RDB 持久化策略

2.1 什么是 RDB 方式

  RedisDatabase(RDB),就是在指定的时间间隔内将内存中的数据集快照写入磁盘。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。

  快照文件称为 RDB 文件,保存了在某个时间点的全部数据,默认是保存在当前运行目录,默认文件名是 dump.rdb,该文件会自动创建。

  RDB 技术非常适合做数据备份,可以保存最近一个小时,一天,一个月的全部数据。保存数据是在单独的进程中写文件,不影响 Redis 的正常使用。

 

2.2 备份时机

RDB 持久化在四种情况下会执行:

(1) 执行 save 命令

(2)执行 bgsave 命令

(3)Redis 停机

(4)触发 RDB 条件

 

2.3 save 命令执行 RDB

步骤:

(1)启动 redis 服务器,并用 redis-cli 连接该服务器。

(2)在客户端中执行 save 命令。

(3)查看 redis 的安装路径,可以发现 redis 自动创建了 dump.rdb 文件。

  注意:save 命令会使用主进程来执行 RDB,这个过程中其它所有命令都会被阻塞,因此一般在关闭 redis 之前或在数据迁移时可能会用到该命令。

 

2.4 bgsave 命令执行 RDB

步骤:

(1)在客户端中执行 bgsave 命令。

(2)该命令也会自动创建 dump.rdb 文件。

(3)bgsave 命令可以异步执行 RDB:执行后会开启独立进程完成 RDB,主进程可以继续处理用户请求,不受影响。

 

2.5 停机时 Redis 自动执行 save 命令

步骤:

(1)在客户端中执行先存入键值对,然后再执行shutdown命令。

(2)该命令也会自动创建 dump.rdb 文件。

(3)重新启动 redis 服务器。

(4)重新用客户端连接 redis 服务器,可以查询到执行shutdown命令前存入的数据。

  redis 服务器重新启动时,会自动读取 dump.rdb 文件,恢复了数据。

 

2.6 触发 RDB 的条件

  Redis 在配置文件 redis.conf 中,设置了触发 RDB 的机制,打开配置文件,可以找到以下参数:

redis 持久化数据到将数据库 redis的数据持久化_Redis

 

该参数表示执行 RDB 生成快照文件的时间策略。

配置格式:save <seconds> <changes>

功能:当在“N 秒内数据集至少有 M 个 key 改动”这一条件被满足时, 自动保存一次数据集。如: 900 秒内,如果至少有 1 个 key 被修改,则执行 bgsave 。

注意:

 可以根据系统的需要,加入自己的触发机制

 save "" ,表示禁用 RDB

 

2.7 RDB 的其它配置

RDB 的其他配置参数,可以在 redis.conf 文件中设置。

 Dbfilename:设置 RDB 文件的名称

redis 中默认的 RDB 文件名为 dump.rdb。

在配置文件中,找到“dbfilename” ,可以修改为自己设置的 RDB 文件名。

 dir:指定 RDB 文件的存储位置,

RDB 文件默认存储路径是 ./ 当前目录,即 redis 的安装路径

 Rebcompression:是否压缩 RDB 文件,建议不开启

 注意:配置文件修改后,保存关闭。重启 redis 服务器时,要用以下命令:

redis-server.exe redis.windows.conf(启动时读配置文件)

 

3、AOF 持久化策略

3.1 什么是 AOF 方式

  为解决 RDB 方式丢失数据的问题,从 1.1 版本开始,redis 增加了一种更加可靠的方式:AOF 持久化方式。

  Append-only File(AOF),Redis 每次接收到一条更新数据的命令时,它将把该命令写到一个 AOF 文件中(只记录写操作,读操作不记录)。当 Redis 重启时,它通过执行 AOF 文件中所有的命令来恢复数据。

 

3.2 AOF 的配置

默认情况下,AOF 是关闭的,如果在配置文件中做如下配置:

 Appendonly:开启 aof 功能

appendonly:默认是 no,改成 yes 即开启了 aof 持久化

 appendfilename:指定 AOF 文件名

默认文件名为 appendonly.aof ,可以修改。

 dir:指定 RDB 和 AOF 文件存放的目录,默认是./

 appendfsync:配置向 aof 文件写命令数据的策略

 no:写命令执行完先放入 AOF 缓冲区,由操作系统决定何时将缓冲区内容写回磁盘;

 always:表示每执行一次写命令,立即记录到 AOF 文件;

 everysec:写命令执行完先放入 AOF 缓冲区,然后表示每隔 1 秒将缓冲区数据写到 AOF 文件,是默认方案。

 

三种策略对比:

redis 持久化数据到将数据库 redis的数据持久化_redis 持久化数据到将数据库_02

 

3.3 开启AOF 步骤:

 关闭 RDB 策略,打开配置文件,输入 save ""

 开启 AOF 策略,打开配置文件,修改 appendonly 为“yes”

 其他参数自行修改,不修改则使用默认值

 保存并关闭配置文件

 执行以下命令,重启 redis 服务器,并读取配置文件:

redis-server.exe redis.windows.conf

用客户端连接 redis 服务器,执行存储数据的命令

 查看 redis 安装目录,可以看到出现了 appendonly.aof 文件

 用记事本打开 appendonly.aof 文件,可以看到写入的命令

 同样,可以停止 Redis 服务,再重启,可以发现数据已恢复。

 

3.4 AOF 重写

  因为 appendonly.aof 文件中存储的是执行命令,所以会产生很多没用的命令,因此,redis 会定期根据最新的内存数据生成新的 aof 文件。

 bgrewriteof:重写 aof 文件

另外,也可以通过两个配置参数,控制 aop 文件重写的频率:

 auto-aof-rewrite-min-size 64mb

表示 aof 文件至少达到了 64m 才会触发重写

 auto-aof-rewrite-percentage 100

表示 aof 文件距离上次重写增长了 100%才会再次触发重写

 

4、两种持久化策略比较

redis 持久化数据到将数据库 redis的数据持久化_redis_03