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、两种持久化策略比较
标签:AOF,持久,文件,Redis,数据库,redis,命令,RDB From: https://www.cnblogs.com/qiqi-yi/p/17289256.html