一、Docker Compose 文件中的 version
- 问题:
version: "3.2"
是部署文件的版本还是 Redis 镜像的版本? - 解答:
version
指的是 Docker Compose 文件的语法版本,与 Redis 镜像的版本无关。- Docker Compose 的语法版本决定了支持的功能和语法特性,例如网络配置和服务扩展等。
- 最新的 Docker CLI 不再强制要求
version
,会提示WARN[0000] /root/redis/docker-compose.yaml: 'version' is obsolete
,可以省略。
二、ps -ef | grep redis
的含义
- 作用:列出运行中的进程,并过滤出与
redis
相关的进程。 - 命令详解:
ps
:显示系统中的进程状态。- 全称:Process Status
-e
:显示所有进程(包括其他用户的进程)。- 全称:Every process
-f
:以全格式显示进程信息。- 全称:Full format
|
:管道操作符,将前一个命令的输出作为后一个命令的输入。grep redis
:从输出中筛选包含redis
的行。- grep 全称:Global Regular Expression Print (全局正则表达式输出)
三、Docker 执行 Redis 命令的方式
- 命令:
docker exec -it r1 redis-cli --port 7001
docker exec
:在运行的容器中执行命令。- 全称:Execute
-it
:交互式模式,提供终端支持。-i
:保持输入流打开(Interactive)。-t
:分配伪终端(Tty)。
redis-cli
:Redis 命令行客户端。--port 7001
:指定连接的 Redis 服务端口。
- 命令:
docker exec -it r1 bash
- 功能:进入容器内的 Bash 环境,可以执行系统级命令。
- 如果要执行 Redis 操作,需要先运行
redis-cli -p 7001
。
- 差异:
redis-cli
:直接与 Redis 交互,适合操作 Redis。bash
:进入容器环境后再运行redis-cli
。
四、删除 Redis 主机里的 Slave 节点
-
查看当前主从信息:
info replication
示例输出:
role:slave master_host:127.0.0.1 master_port:7001
-
停止从属关系:
slaveof no one
-
注意事项:
- 如果执行
slaveof no one
后,slave
会转为master
。 - 如果未生效,检查是否误输入参数,例如错误的
-p 7002
。
- 如果执行
五、Redis Replication 的 IP 显示差异
- 问题:Slave 配置的
master_host
是192.168.142.128
,但 Master 显示的 Slave IP 为192.168.142.134
。 - 原因:
- Redis 会通过 Slave 节点的连接请求自动记录 Slave 的 IP。
- 如果 Docker 使用
host
网络模式,主机的实际网络 IP 会被记录,而不是配置文件中的master_host
。
六、PSYNC(Partial Resynchronization)
- 全称:Partial Synchronization
- 作用:
- Redis 主从同步机制,用于减少全量同步开销。
- 如果 Slave 已有一部分数据且偏移量匹配,Master 只发送增量数据。
- 如果偏移量不匹配,执行全量同步。
七、RDB 的全称
- 全称:Redis Database File
- 功能:
- Redis 的持久化方式之一。
- 通过定期快照保存数据到磁盘,生成
.rdb
文件。 - 配置:
save <seconds> <changes>
。
八、Append-Only 模式与持久化
- Append-Only 模式:
- Redis 将每次写操作追加到
appendonly.aof
文件。 - 开启方式:
appendonly yes
。
- Redis 将每次写操作追加到
- 持久化与写入磁盘的区别:
- 持久化:数据即使系统崩溃或重启仍可恢复。
- 写入磁盘:数据短期存储于磁盘,但可能因重启或自动清理而丢失。
- RabbitMQ 的例子:
- 消息队列满时,临时消息会写入磁盘,但这不等于持久化。
- 持久化消息在重启后仍存在,临时消息会被清理。
九、Redis 配置文件解析
port 7000 # Redis 服务监听端口
cluster-enabled yes # 启用集群模式
cluster-config-file nodes.conf # 集群节点配置文件
cluster-node-timeout 5000 # 集群节点通信超时时间(毫秒)
appendonly yes # 启用 AOF 持久化
- 是否为集群节点:
- 如果启用了
cluster-enabled yes
,则当前实例是 Redis 集群的一个节点。
- 如果启用了