创建redis容器
1. 使用 docker run
命令:
Bash复制
docker run -d -p 6379:6379 redis:7.0.14
docker run
: 启动一个新的容器。-d
: 在后台运行容器。-p 6379:6379
: 将容器内部的 6379 端口映射到宿主机的 6379 端口,以便外部访问 Redis。redis:7.0.14
: 指定要使用的 Redis 镜像,这里使用的是官方提供的 Redis 7.0.14 镜像。
2. 使用 docker-compose.yml
文件:
Yaml复制
version: "3"
services:
redis:
image: 'redis:6.0'
restart: always
hostname: redis
container_name: redis
volumes:
- ../data/redis_data:/data
- ../redis/redis.conf:/usr/local/etc/redis/redis.conf
environment:
- REDIS_CONFIG_FILE=/usr/local/etc/redis/redis.conf
ports:
- '6379:6379'
command: redis-server --requirepass your_password --appendonly yes
version: '3.7'
: 指定 Docker Compose 版本。services
: 定义服务列表。redis
: 定义 Redis 服务。image: redis:7.0.14
: 指定 Redis 镜像,这里使用的是官方提供的 Redis 7.0.14 镜像。ports: - "6379:6379"
: 将容器内部的 6379 端口映射到宿主机的 6379 端口。- environment:可以指定环境变量,示例里指定了redis的参数配置,可以不指定,使用默认配置
- command:可以显示指定具体的redis配置项,appendonly yes表明需要使用aof
使用 docker-compose
启动容器:
- 将配置文件保存为
docker-compose.yml
。 - 在终端运行
docker-compose up -d
命令启动 Redis 容器。
其他配置:
-
你可以通过添加
command
和environment
配置项来设置 Redis 的密码、数据目录、持久化模式等参数。 -
例如,设置密码:
Yaml复制
command: redis-server --requirepass "your_password" environment: - REDIS_PASSWORD=your_password
-
你可以使用
volumes
配置项将本地目录挂载到容器的数据目录,以便持久化数据。
示例:
Yaml复制
version: '3.7'
services:
redis:
image: redis:7.0.14
ports:
- "6379:6379"
command: redis-server --requirepass "your_password"
environment:
- REDIS_PASSWORD=your_password
volumes:
- ./data:/data
注意:
- 使用
docker-compose
可以更方便地管理多个容器,并进行配置。 - 在使用
docker run
或docker-compose up
启动容器时,可以使用-d
选项在后台运行容器,可以使用-p
选项指定端口映射。 - redis7.0以后得版本使用docker部署会失败,网上说是有bug不建议使用,如果一定要用的话可以打开特权模式的开关,我试过可以正常部署
持久化:
在 Redis 中,RDB 文件是一种持久化方式,用于将 Redis 数据存储到磁盘上。你可以通过以下几种方式来生成 RDB 文件:
-
手动执行 SAVE 命令:
在 Redis 中,你可以通过执行 SAVE 命令来生成 RDB 文件。该命令会阻塞 Redis 服务器,直到 RDB 文件生成完成为止。你可以在 Redis 命令行中执行以下命令:SAVE
执行完毕后,Redis 会在工作目录中生成一个名为
dump.rdb
的 RDB 文件。 -
配置自动保存:
你也可以在 Redis 配置文件中设置自动保存的规则,让 Redis 定期生成 RDB 文件。在redis.conf
配置文件中,你可以设置类似以下的配置:save 900 1 # 表示在 900 秒(15分钟)内,如果至少有 1 个 key 被修改,则生成 RDB 文件 save 300 10 # 表示在 300 秒(5分钟)内,如果至少有 10 个 key 被修改,则生成 RDB 文件 save 60 10000 # 表示在 60 秒内,如果至少有 10000 个 key 被修改,则生成 RDB 文件
这些设置会让 Redis 在满足条件时自动执行 SAVE 命令来生成 RDB 文件。
-
使用 BGSAVE 命令:
你还可以在 Redis 命令行中执行 BGSAVE 命令来在后台生成 RDB 文件,而不会阻塞 Redis 服务器:BGSAVE
这将会在后台生成一个新的 RDB 文件。
恢复dump文件到redis容器
Redis 恢复的机制
- 如果只配置 AOF ,重启时加载 AOF 文件恢复数据;
- 如果同时配置了 RDB 和 AOF ,启动是只加载 AOF 文件恢复数据;
- 如果只配置 RDB,启动是将加载 dump 文件恢复数据。
要将Redis RDB文件中的数据恢复到Redis容器中,可以按照以下步骤进行操作:
- 找到Redis容器的ID或名称:
恢复aof数据修改配置:appendonly yes
恢复rdb数据修改配置:appendonly no
如果想要先恢复rdb的数据,再开启aof的话可以先修改appendonly no,启动服务恢复完数据后,再通过CONFIG SET appendonly yes命令动态修改开启aof
- 将RDB文件复制到Redis容器所在的主机上,假设文件名为
dump.rdb
。 -
找到Redis容器的ID或名称:
docker ps
-
将RDB文件复制到Redis容器内部:
docker cp dump.rdb CONTAINER_ID:/data/dump.rdb
这将把RDB文件复制到Redis容器的
/data
目录中(假设容器中Redis的数据目录是/data
)。如果有按照上面说的自定义数据目录到/data,就不需要执行以下4,5,6步 -
进入Redis容器:
docker exec -it CONTAINER_ID /bin/bash
-
在Redis容器内部,将新的RDB文件移动到Redis数据目录,并覆盖原有的RDB文件:
mv /data/dump.rdb /var/lib/redis/dump.rdb #只有在没有配置默认数据目录的情况下redis才会读取这个目录(不确定),我只使用过自定义数据目录的情况,/var/lib/redis目录可能不存在,需要手动创建再执行
-
退出容器:
exit
-
重启Redis容器,使更改生效:
docker restart CONTAINER_ID
这样,新的RDB文件就会被加载到Redis容器中,并且数据会被恢复。请确保在进行操作前备份了原有的RDB文件和Redis数据,以便在需要时进行恢复。
确认数据恢复:
- 使用 Redis 客户端工具(例如
redis-cli
)连接到 Redis 容器。 - 使用
KEYS *
命令查看所有键,确认数据已经恢复到 Redis 容器中。
示例:
假设你的 RDB 文件名为 dump.rdb
,容器名称为 redis
,数据目录为 /data
,Redis 服务器的密码为 your_password
,你可以使用以下命令进行恢复:
Bash复制
docker cp dump.rdb redis:/data/dump.rdb
docker restart redis
redis-cli -h localhost -p 6379 -a your_password
KEYS *
注意:
- 如果你的 Redis 容器使用的是自定义配置,确保数据目录的路径与配置文件中设置的路径一致。
- 如果你使用的是
docker-compose
,可以使用docker-compose exec redis bash
命令进入容器,并在容器内部执行命令进行数据恢复。 - 如果你的 RDB 文件非常大,建议使用
docker cp
命令进行传输,避免使用docker exec
命令,因为docker exec
可能会因为文件大小限制而导致传输失败。 - 在数据恢复之前,最好备份现有的 Redis 数据,以防数据丢失。