如何设置运行在 Docker 中的 Redis 开启 RDB 落盘持久化

如何设置运行在 Docker 中的 Redis 开启 RDB 落盘持久化

写这篇文章原因是某个开源系统将部分系统配置直接存在 Redis 中,由于 Redis 运行在 Docker 中,每次升级 Docker 或重启应用都会导致这部分系统配置丢失。所以研究了一下如何无缝开启 RDB 落盘持久化,这样重启数据就不会丢失,记录一下过程。

Redis 的数据落盘持久化分为两种 RDB 和 AOF,本次诉求简单,就采用轻量的 RDB。

保存运行在 Docker 中的 Redis 的数据

docker exec -it redis_server redis-cli BGSAVE

运行后等待 10 秒,会后台生成 /data/dump.rdb 备份文件。

创建备份目录并且利用 docker cp 命令把运行中 redis 容器内的备份文件复制出来:

mkdir -p /path/to/your/redis/data
docker cp redis_server:/data/dump.rdb /path/to/your/redis/data

修改 docker-compose.yml 文件

version: '3.8'

services:
  redis:
    image: redis:latest
    container_name: redis_server
    volumes:
      - /path/to/your/redis/data:/data
    ports:
      - "6379:6379"
    command: ["redis-server", "--save", "60", "1", "--dir", "/data"]

重点是 volumes: 和 command: ,其中 "--save", "60", "1" 表示每 60 秒,key 变动 1 次就更新一下备份文件。

重启服务

docker compose down
docker compose up -d

重启后就会发现 Redis 数据没有丢失。