Redis 持久化 RDB -> AOF

848 阅读1分钟

背景

当前 redis 持久化模式为 RDB,具体配置

save 900 1  # 900 秒有 1 次更新则快照
save 300 10 # 300 秒有 10 次更新则快照
save 60 10000 # 60 秒有 10000 次更新则快照

stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data

那么通过 docker 运行 redis 可将数据持久化到本地特定目录,即

docker run -d --name=redis -p 6379:6379 -v $(pwd):/data redis:3.2.3

通过 save 规则可以知道,并不是每次操作都会持久化,即重启可能丢数据。 为了避免丢数据导致异常,于是想变更持久化模式为 AOF。

操作

调整 redis 配置文件,aof 相关配置如下

appendonly yes

appendfilename "appendonly.aof"
appendfsync everysec # 每秒备份
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes

重启 redis ,发现原来的 rdb 数据并没有加载,可见变更为 aof 之后,redis 启动之时不会加载 rdb 的数据,于是还原配置,恢复 redis 数据。

参考 redis 文档 怎么从 RDB 持久化切换到 AOF 持久化, 发现可以在运行时直接切换 redis 持久化模式,执行命令如下

redis-cli> CONFIG SET appendonly yes
redis-cli> CONFIG SET save ""

发现 /data 目录下自动生成了appendonly.aof 文件,通过 dbsize 命令来进行验证数据库的键的数量没有改变。至此,说明 redis 的持久化模式已经进行了变更。

为了避免重启之后配置失效,重新调整 redis.conf 配置文件,添加 AOF 相关配置,于是重启 redis 验证,发现数据正常,至此,切换结束。