Redis6.0 解压版的数据持久化操作【RDB+AOF】及注意事项记录

Redis6.0 解压版的数据持久化操作【RDB+AOF】

Redis6.0 解压版的数据持久化操作【RDB+AOF】

记录下redis的数据持久化操作,主要就是修改配置文件 redis.windows.conf

需求:

解压版 Redis 默认是内存数据库,重启丢数据。

要持久化,必须:

1、修改 redis.windows.conf 配置 RDB 或 AOF

2、启动 Redis 时 指定配置文件

3、保存数据后重启测试

操作

启动脚本

cd /d <路径> = 切换盘符 + 切换目录,

如果不加 /d,执行 cd E:\install\Redis6.0\redis-6.0.14 时:

如果当前在 C:盘,目录不会切换到 E:盘,只会报错或停留在 C:盘

用txt写好后,改成 bat 即可

复制代码
@echo off
cd /d E:\install\Redis6.0\redis-6.0.14
redis-server.exe  redis.windows.conf
pause

注意点:脚本加上这个 redis.windows.conf ,在redis 启动时才会去加载这个配置文件,里面我们修改的配置才会生效。

RDB 持久化

修改配置

Redis 的持久化数据主要是 RDB 文件 或 AOF 文件,它们都是普通文件,默认存放在 Redis 的工作目录(dir 配置项)

在 Redis 中,RDB(快照持久化) 默认就是开启的,只要配置文件中有 save 指令即可。

RDB 持久化会在指定时间和写入次数条件下,把内存数据快照写入磁盘。

复制代码
 # 这个就是配置文件里面的 save 指令
save 900 1
save 300 10
save 60 10000

配置文件 redis.windows.conf 中,指定启动时去 bin 目录找 dump.rdb 文件

dir ./

dbfilename dump.rdb

注意事项

注意:【Redis 会每隔 900 秒检查过去 900 秒内是否有修改,Redis 并不会在修改后马上写入,而是等到 900 秒这个时间窗口到期才触发】

起因是后面我发现新增数据后,重启还是没有数据,需要输入 【save】这个命令强制保存,再重启,数据才会存在。

因此,因为 RDB 不满足我的持久化需求,所以我打算把 AOF 也开启,AOF 和 RDB 是能同时开启的。

AOF 持久化

修改配置
复制代码
# 在配置文件中,开启 AOF 持久化
appendonly yes

# 开启 AOF 持久化后,数据是存在这个  "appendonly.aof" 文件里面的
appendfilename "appendonly.aof"

# 添加 AOF 的持久化策略:
# always - 每次写操作都刷盘(最安全,但性能差)
# everysec - 每秒刷盘一次(推荐)
# no - 不自动刷盘(不安全)
# appendfsync always
appendfsync everysec
# appendfsync no
注意事项:

问题: 刚开始数据是存在rdb,然后用 save 保存,重启后数据已经持久化了,后面开启了 aof,重启后发现数据又没了。

解答: RDB 和 AOF 同时存在时的数据恢复逻辑,Redis 官方规定:

1、Redis 启动时,如果同时存在 RDB 文件 (dump.rdb) 和 AOF 文件 (appendonly.aof):

--->默认 优先使用 AOF 文件 来恢复数据,如果 AOF 文件不存在或损坏,则使用 RDB 文件

2、当我之前只用 RDB 持久化:

--->save 会把当前内存快照写入 dump.rdb,这个时候数据在 dump.rdb 中

3、后来我又开启了 AOF:

--->Redis 会生成一个新的 appendonly.aof 文件,AOF 文件初始内容可能为空(或者只包含 RDB 启动后的写命令),启动 Redis 时,会根据 AOF 文件恢复数据,所以发现没有之前 RDB 的 key → 看起来"数据丢了"

解决:

同时使用 RDB + AOF,确保不会丢数据,需要:

1、先开启 AOF,再手动把 RDB 数据导入 AOF:

--->方法:把 Redis 停掉,启动 RDB 恢复数据,然后用 BGREWRITEAOF 命令生成新的 AOF 文件,AOF 会把内存里所有 key 写入。

复制代码
客户端启动后,输入这个命令让 AOF 文件包含当前所有数据
BGREWRITEAOF

2、以后就以 AOF 为主:

--->RDB 仍可做周期性备份,AOF 确保数据更安全

BGREWRITEAOF命令的使用场景:

内存中已有数据,后面再开启 AOF,但 AOF 文件还没包含前面这些数据 → 执行 BGREWRITEAOF 会把现有内存数据写入 AOF