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 的机制,打开配置文件,可以找到以下参数:
该参数表示执行 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 文件,是默认方案。
三种策略对比:
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、两种持久化策略比较