Redis 数据库的持久化

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、两种持久化策略比较

 

 

posted @ 2023-04-05 13:20  Linqylin  阅读(517)  评论(0编辑  收藏  举报