这是《Redis 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 本章从安装、启动、配置文件、Docker 到多实例部署,把一套可用于学习和实验的 Redis 环境搭起来。
3.1 安装方式怎么选
| 方式 | 适合 |
|---|---|
| 包管理器 | 快速开发环境 |
| Docker | 最推荐的学习与本地实验 |
| 源码编译 | 阅读源码、指定版本、调试 |
| 云托管 | 生产省运维,但成本和迁移策略需评估 |
生产自建建议固定版本、统一配置模板、由配置管理工具部署,不要手工改一台忘一台。
3.2 macOS / Linux 包管理器安装
macOS:
brew install redis
brew services start redis
Ubuntu/Debian:
sudo apt update
sudo apt install redis-server
sudo systemctl enable --now redis-server
RHEL/CentOS:
sudo dnf install redis
sudo systemctl enable --now redis
验证:
redis-cli ping
# PONG
3.3 Docker 单实例
docker run -d \
--name redis \
-p 6379:6379 \
redis:7.2 \
redis-server --requirepass redis123
连接:
redis-cli -h 127.0.0.1 -p 6379 -a redis123 ping
挂载配置与数据:
mkdir -p redis-data
docker run -d \
--name redis \
-p 6379:6379 \
-v "$PWD/redis.conf:/etc/redis/redis.conf" \
-v "$PWD/redis-data:/data" \
redis:7.2 \
redis-server /etc/redis/redis.conf
注意 -a 会把密码暴露在 shell 历史中,学习环境可用,生产应使用 REDISCLI_AUTH 或 secret 注入:
export REDISCLI_AUTH=redis123
redis-cli ping
3.4 源码编译
git clone https://github.com/redis/redis.git
cd redis
git checkout 7.2
make -j8
make test
./src/redis-server --version
./src/redis-cli --version
启动:
./src/redis-server redis.conf
调试构建:
make OPTIMIZATION="-O0 -g"
源码阅读与调试见第 29 章。
3.5 配置文件核心项
一个学习用 redis.conf:
bind 0.0.0.0
protected-mode yes
port 6379
requirepass redis123
daemonize no
logfile ""
dir /data
# 内存
maxmemory 1gb
maxmemory-policy allkeys-lru
# 持久化
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendfsync everysec
aof-use-rdb-preamble yes
save 3600 1 300 100 60 10000
# 慢查询
slowlog-log-slower-than 10000
slowlog-max-len 256
latency-monitor-threshold 100
逐项理解:
| 配置 | 说明 |
|---|---|
bind |
监听地址,生产只绑内网网卡 |
protected-mode |
无密码且非本机访问时保护 |
requirepass |
兼容密码认证,新版建议 ACL |
dir |
RDB/AOF 工作目录,必须持久化且有权限 |
maxmemory |
内存上限,超过后按策略淘汰 |
appendonly |
开启 AOF |
appendfsync |
AOF 刷盘策略 |
slowlog-log-slower-than |
微秒,默认 10000 = 10ms |
注意:上例
allkeys-lru适合纯缓存。如果 Redis 存放业务状态或锁,默认淘汰策略可能造成严重问题,第 14 章详细讨论。
3.6 启动与停止
前台启动便于观察:
redis-server redis.conf
守护进程:
redis-server redis.conf --daemonize yes
停止:
redis-cli shutdown save
redis-cli -a xxx shutdown nosave
save 表示退出前生成 RDB;nosave 不保存。生产优雅停止必须确认持久化与复制策略。
3.7 多实例部署
同一台机器可按端口拆分实例,实现业务隔离:
redis-6379 -> 商品缓存
redis-6380 -> 会话
redis-6381 -> 排行榜
启动:
redis-server /etc/redis/6379.conf
redis-server /etc/redis/6380.conf
redis-server /etc/redis/6381.conf
每个实例必须独立设置:
port
dir
pidfile
logfile
dbfilename
appenddirname
requirepass / aclfile
maxmemory
多实例共享 CPU、内存和网络,适合隔离故障域,不是无限扩容手段。
3.8 搭建一主两从实验环境
配置主节点 6379:
port 6379
requirepass redis123
masterauth redis123
从节点 6380、6381:
port 6380
replicaof 127.0.0.1 6379
masterauth redis123
requirepass redis123
启动后查看:
INFO replication
主节点应看到:
role:master
connected_slaves:2
测试:
# 主
SET replication:test ok
# 从
GET replication:test
默认从节点只读:
replica-read-only yes
3.9 常见启动问题
| 现象 | 原因 | 处理 |
|---|---|---|
| 连接被拒绝 | 未启动或端口/防火墙错 | 检查进程、bind、安全组 |
NOAUTH |
未认证 | 配置密码或 ACL 用户 |
DENIED Redis is running in protected mode |
未密码且远程访问 | 开启密码或只绑内网 |
| AOF/RDB 写入失败 | dir 无权限或磁盘满 |
检查路径与磁盘 |
| 内存告警 | maxmemory 过小 | 容量规划与淘汰策略 |
| 启动后立刻退出 | 配置语法错 | 前台启动看日志 |
本章小结
- Docker 是最快的学习环境;生产自建需统一版本与配置模板;
dir决定持久化文件位置,是部署检查重点;maxmemory与maxmemory-policy必须显式设计;- 多实例能隔离业务故障域,但共享机器资源;
- 一主两从环境是学习复制、哨兵与故障切换的基础。
思考题
bind 0.0.0.0加requirepass就等于安全吗?还缺什么?- 为什么不建议多个业务共用一个 Redis 实例?
- 从节点默认只读,为什么这么设计?如果直接写从节点会造成什么问题?