RedisNotes

第 03 章:环境搭建

zjc 于 2026-01-03 发布

这是《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 过小 容量规划与淘汰策略
启动后立刻退出 配置语法错 前台启动看日志

本章小结

思考题

  1. bind 0.0.0.0requirepass 就等于安全吗?还缺什么?
  2. 为什么不建议多个业务共用一个 Redis 实例?
  3. 从节点默认只读,为什么这么设计?如果直接写从节点会造成什么问题?