Redis 从零到主从复制:一篇保姆级实操教程(nano 编辑版)
环境:Ubuntu 22.04 + Redis 6.x,全程使用nano 手工编辑配置文件
密码约定:YourStrongPassword,执行时请替换成你自己的强密码
目录
- nano 必会快捷键
- 安装 Redis
- 修改端口 + 密码
- 常用命令:五大基本类型
- 持久化:RDB + AOF
- 主从复制(开发环境)
- 踩坑速查表
- 总结与下一步
0. nano 必会快捷键(全程只用这 4 个)
| 快捷键 | 作用 |
|---|---|
Ctrl+W | 查找关键词(定位要改的行) |
Ctrl+\ | 替换:输入旧内容 → 回车 → 新内容 → 回车 → 按A全部替换 |
Ctrl+O | 保存 |
Ctrl+X | 退出 |
1. 安装 Redis
apt-get update apt-get install -y redis-server systemctl enable redis-server systemctl start redis-server systemctl status redis-server # 看到 Active: active (running) 即成功提示:若提示
wget: command not found,先执行apt-get install -y wget;apt 报错就改用apt-get。
2. 修改端口 + 密码(nano 版)
默认 6379 端口、无密码,暴露公网非常危险。改配置前先备份:
cp /etc/redis/redis.conf /etc/redis/redis.conf.bak nano /etc/redis/redis.conf用Ctrl+W逐项定位、Ctrl+\替换,共改 3 处:
| 关键词 | 改成 | 说明 |
|---|---|---|
port | port 6380 | 端口 |
bind | bind 127.0.0.1(本机)或bind 0.0.0.0(远程) | 只本机用保持 127.0.0.1 |
requirepass | requirepass YourStrongPassword | 若原行带#注释,删掉#再改 |
检查并重启测试:
grep -nE "^(port|requirepass|bind)" /etc/redis/redis.conf # 预期:port 6380 / requirepass YourStrongPassword / bind 127.0.0.1 systemctl restart redis-server redis-cli -p 6380 -a YourStrongPassword ping # 返回 PONG 即成功注意(远程连接):绑定了
0.0.0.0时,记得在云厂商安全组和宝塔防火墙(若装了)放行 6380 端口的 TCP 入方向。允许外网连接必须用强密码,否则等于把服务器钥匙送给黑客。
3. 常用命令:五大基本类型
连接客户端:
redis-cli -p 6380 -a YourStrongPassword # 出现 127.0.0.1:6380> 提示符3.1 String(字符串)——计数器、缓存
SET name zzy # 存 GET name # 取 INCR counter # 自增 EXPIRE name 60 # 60 秒后过期 TTL name # 查看剩余秒数(-1 永不过期) DEL name # 删3.2 Hash(哈希)——存对象
HSET user:1 name zzy age 25 city hangzhou # 存对象字段 HGET user:1 name # 取单个字段 HGETALL user:1 # 取全部字段 HDEL user:1 age # 删字段3.3 List(列表)——消息队列
LPUSH mylist a b c # 头部插入 RPUSH mylist d # 尾部插入 LRANGE mylist 0 -1 # 查看全部 LPOP mylist # 头部弹出 LLEN mylist # 长度3.4 Set(集合)——自动去重
SADD myset apple banana apple # 重复自动忽略 SMEMBERS myset # 只有一个 apple SISMEMBER myset apple # 判断是否存在 SREM myset apple # 删成员3.5 Sorted Set(有序集合)——排行榜
ZADD rank 100 zzy 80 tom 95 jerry # 分数 成员 ZREVRANGE rank 0 -1 WITHSCORES # 从大到小(排行榜) ZRANGE rank 0 -1 WITHSCORES # 从小到大3.6 通用操作
KEYS * # 查看所有 key(生产慎用) EXISTS key # 判断存在 DEL key # 删除 FLUSHALL # 清空所有数据(极其危险!) EXIT # 退出4. 持久化:RDB + AOF
| 对比 | RDB 快照 | AOF 日志 |
|---|---|---|
| 原理 | 定时把内存数据拍快照存盘 | 把每条写命令记到日志 |
| 文件 | dump.rdb | appendonly.aof |
| 安全性 | 可能丢最后一次快照后的数据 | everysec 最多丢 1 秒 |
| 默认 | 开启 | 关闭 |
怎么选:开发环境 RDB 够用;生产环境建议两者都开。
4.1 开启 AOF(nano 版)
nano /etc/redis/redis.conf| 关键词 | 改成 |
|---|---|
appendonly | appendonly yes(把 no 改 yes) |
appendfsync | appendfsync everysec(取消注释即可) |
确认并验证:
grep -nE "^(save |appendonly|appendfsync|dbfilename)" /etc/redis/redis.conf # 预期:save 900 1 / save 300 10 / save 60 10000 / appendonly yes / appendfsync everysec / dbfilename dump.rdb systemctl restart redis-server redis-cli -p 6380 -a YourStrongPassword INFO persistence | grep aof_enabled # aof_enabled:1 即 AOF 已开启4.2 实战验证:重启数据不丢
redis-cli -p 6380 -a YourStrongPassword SET test_persistence "hello redis" BGSAVE # 触发 RDB 快照 EXIT systemctl restart redis-server redis-cli -p 6380 -a YourStrongPassword GET test_persistence # 返回 "hello redis" —— 持久化生效5. 主从复制(开发环境)
作用:读写分离(主写从读)、数据备份、高可用基础(主挂了切从)。开发环境不用买第二台服务器,同一台机器跑两个实例即可模拟:
| 角色 | 端口 | 说明 |
|---|---|---|
| 主节点 Master | 6380 | 负责读写 |
| 从节点 Slave | 6381 | 只读,自动同步主节点数据 |
5.1 创建从节点配置并 nano 编辑
cp /etc/redis/redis.conf /etc/redis/redis_6381.conf nano /etc/redis/redis_6381.conf改动 1:Ctrl+\替换以下 4 项(按A全部替换):
| 原内容 | 改成 |
|---|---|
port 6380 | port 6381 |
/var/run/redis/redis-server.pid | /var/run/redis/redis_6381.pid |
/var/log/redis/redis-server.log | /var/log/redis/redis_6381.log |
dbfilename dump.rdb | dbfilename dump_6381.rdb |
改动 2:再改下面两行为no,否则手动启动从节点时不会后台运行、终端会被占住:
| 原内容 | 改成 |
|---|---|
daemonize no | daemonize yes |
supervised systemd | supervised no |
改动 3:光标移到文件末尾,追加主从配置:
replicaof 127.0.0.1 6380 masterauth YourStrongPassword注意:两台服务器时把
127.0.0.1换成主节点真实 IP;masterauth填主节点的密码(与第 2 步requirepass一致)。保存退出(Ctrl+O→Ctrl+X)。
5.2 启动从节点
redis-server /etc/redis/redis_6381.conf ss -tlnp | grep 6381 # 看到 0.0.0.0:6381 即启动成功5.3 验证同步
主节点写入:
redis-cli -p 6380 -a YourStrongPassword SET master_key "data from master" EXIT从节点读取:
redis-cli -p 6381 -a YourStrongPassword GET master_key INFO replication EXIT三个成功标志:
"data from master" # 数据已同步 role:slave # 角色是从节点 master_link_status:up # 与主节点连接正常回主节点看从机状态:
redis-cli -p 6380 -a YourStrongPassword INFO replication # role:master # connected_slaves:1 # slave0:ip=127.0.0.1,port=6381,state=online,...提示:从节点默认只读,对它写数据会报
READONLY错误——这是正常现象,不是 bug。
6. 踩坑速查表
| 现象 | 原因 / 解决 |
|---|---|
| nano 报 “File is being edited” | 上个 nano 没退干净,回车选Yes强制打开 |
客户端连接10060超时 | 端口没放行:检查云厂商安全组 + 宝塔防火墙入方向 |
| 外网连不上、本地能连 | 安全组没放行 /bind没改0.0.0.0,用ss -tlnp \| grep 端口查监听 |
主从master_link_status:down | masterauth密码写错 / 主节点地址端口写错 / 端口没放行 |
从节点READONLY报错 | 从节点只读属性,属正常现象 |
7. 总结与下一步
已完成:安装配置(端口+密码)→ 五大基本类型增删改查 → RDB+AOF 持久化 → 主从复制并验证同步。
下一步可以学什么?
- Spring Boot / Django 等框架集成 Redis
- Redis 事务、发布订阅、Lua 脚本
- 生产环境高可用:哨兵(Sentinel)模式
- 大规模场景:Redis Cluster 集群
全文完 · 基于 Ubuntu 22.04 + Redis 6.x 实测整理