02 - Redis 安装与配置
Redis 安装与配置
2.1 安装方式总览
| 方式 | 适用场景 | 难度 |
|---|---|---|
| Docker(推荐) | 开发/测试/生产 | ⭐ |
| 包管理器(apt/yum) | Linux 快速部署 | ⭐⭐ |
| 源码编译 | 需要自定义编译选项 | ⭐⭐⭐ |
| Homebrew | macOS 开发 | ⭐ |
| Windows(WSL) | Windows 开发 | ⭐⭐ |
2.2 Docker 安装(推荐)
Docker 是最简单、最一致的安装方式,强烈推荐用于开发和测试环境。
快速启动
# 拉取镜像
docker pull redis:7.2
# 启动容器
docker run -d \
--name redis \
-p 6379:6379 \
redis:7.2
# 连接测试
docker exec -it redis redis-cli ping
# 输出: PONG
带持久化和密码的启动
# 创建数据目录
mkdir -p /data/redis
# 启动带持久化和密码的 Redis
docker run -d \
--name redis \
-p 6379:6379 \
-v /data/redis:/data \
-v /data/redis/redis.conf:/usr/local/etc/redis/redis.conf \
redis:7.2 \
redis-server /usr/local/etc/redis/redis.conf \
--requirepass "YourStr0ngP@ssword" \
--appendonly yes
# 带密码连接
docker exec -it redis redis-cli -a "YourStr0ngP@ssword"
Docker Compose 方式
创建 docker-compose.yml:
version: '3.8'
services:
redis:
image: redis:7.2
container_name: redis
restart: always
ports:
- "6379:6379"
volumes:
- ./data:/data
- ./redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
environment:
- REDIS_PASSWORD=YourStr0ngP@ssword
healthcheck:
test: ["CMD", "redis-cli", "-a", "YourStr0ngP@ssword", "ping"]
interval: 10s
timeout: 3s
retries: 3
networks:
- redis-net
redis-commander:
image: rediscommander/redis-commander:latest
container_name: redis-commander
restart: always
ports:
- "8081:8081"
environment:
- REDIS_HOSTS=local:redis:6379:0:YourStr0ngP@ssword
depends_on:
- redis
networks:
- redis-net
networks:
redis-net:
driver: bridge
# 启动
docker-compose up -d
# 查看状态
docker-compose ps
# 停止
docker-compose down
💡 技巧:redis-commander 提供了 Web UI 管理界面,浏览器访问 http://localhost:8081 即可可视化管理 Redis。
2.3 Linux 安装
Ubuntu / Debian
# 更新包索引
sudo apt update
# 安装 Redis
sudo apt install -y redis-server
# 查看版本
redis-server --version
# Redis server v=7.0.11 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64
# 启动服务
sudo systemctl start redis-server
sudo systemctl enable redis-server
# 测试连接
redis-cli ping
# PONG
# 查看服务状态
sudo systemctl status redis-server
如果需要最新版本,可以使用 Redis 官方 APT 源:
# 安装依赖
sudo apt install -y lsb-release curl gpg
# 添加 Redis 官方 GPG Key
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
# 添加仓库
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
# 安装
sudo apt update
sudo apt install -y redis
CentOS / RHEL / Fedora
# CentOS 8+ / RHEL 8+ / Fedora
sudo dnf install -y redis
# CentOS 7
sudo yum install -y epel-release
sudo yum install -y redis
# 启动
sudo systemctl start redis
sudo systemctl enable redis
# 防火墙放行
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --reload
macOS(Homebrew)
# 安装
brew install redis
# 启动服务(后台常驻)
brew services start redis
# 或手动启动
redis-server /usr/local/etc/redis.conf
# 测试
redis-cli ping
# PONG
2.4 源码编译安装
适用于需要定制编译选项(如修改内存分配器、启用特定模块)的场景。
# 1. 安装编译依赖
sudo apt install -y build-essential tcl pkg-config
# 2. 下载源码
cd /tmp
wget https://download.redis.io/releases/redis-7.2.4.tar.gz
tar xzf redis-7.2.4.tar.gz
cd redis-7.2.4
# 3. 编译(使用多核加速)
make -j$(nproc)
# 4. 运行测试(可选,耗时约 10 分钟)
make test
# 5. 安装到系统
sudo make install
# 6. 验证
redis-server --version
redis-cli --version
安装为系统服务
# 使用源码中自带的 install script
cd /tmp/redis-7.2.4
sudo ./utils/install_server.sh
# 按提示配置(一路回车使用默认值即可)
# Port : 6379
# Config file : /etc/redis/6379.conf
# Log file : /var/log/redis_6379.log
# Data dir : /var/lib/redis/6379
# Executable : /usr/local/bin/redis-server
# Cli Executable : /usr/local/bin/redis-cli
2.5 redis.conf 核心配置详解
Redis 的配置文件通常位于 /etc/redis/redis.conf,以下是最重要的配置项:
网络配置
# 绑定地址(默认只允许本地访问)
bind 127.0.0.1 -::1
# 保护模式(bind 和 requirepass 都未设置时启用)
protected-mode yes
# 监听端口
port 6379
# TCP backlog(高并发下需调大)
tcp-backlog 511
# 客户端空闲超时(秒,0 为不限制)
timeout 0
# TCP keepalive(秒,建议 60)
tcp-keepalive 60
⚠️ 安全警告:生产环境务必设置 bind 和 requirepass,否则 Redis 实例暴露在公网上会被攻击。
通用配置
# 后台运行(systemd 管理时设为 no)
daemonize no
# PID 文件
pidfile /var/run/redis/redis-server.pid
# 日志级别:debug / verbose / notice / warning
loglevel notice
# 日志文件路径(空字符串表示输出到 stdout)
logfile /var/log/redis/redis-server.log
# 数据库数量
databases 16
# 是否显示 Redis Logo
always-show-logo no
内存配置
# 最大内存限制
maxmemory 2gb
# 内存淘汰策略
maxmemory-policy allkeys-lru
# 淘汰样本数(越大越精确,越慢)
maxmemory-samples 10
各淘汰策略对比:
| 策略 | 范围 | 算法 | 适用场景 |
|---|---|---|---|
noeviction | — | 不淘汰,写入报错 | 不允许数据丢失 |
allkeys-lru | 所有 Key | LRU | 通用缓存 |
allkeys-lfu | 所有 Key | LFU | 热点数据缓存 |
volatile-lru | 有 TTL 的 Key | LRU | 缓存+持久数据混合 |
volatile-lfu | 有 TTL 的 Key | LFU | 同上,更智能 |
volatile-ttl | 有 TTL 的 Key | TTL 最小优先 | 临时数据 |
volatile-random | 有 TTL 的 Key | 随机 | 不推荐 |
持久化配置
# ---- RDB 快照 ----
save 3600 1 # 3600 秒内至少 1 次写入则触发快照
save 300 100 # 300 秒内至少 100 次写入
save 60 10000 # 60 秒内至少 10000 次写入
# 快照文件名
dbfilename dump.rdb
# 数据目录
dir /var/lib/redis
# 快照失败时是否停止写入
stop-writes-on-bgsave-error yes
# RDB 压缩
rdbcompression yes
rdbchecksum yes
# ---- AOF ----
# 开启 AOF
appendonly yes
appendfilename "appendonly.aof"
# AOF 同步策略
appendfsync everysec # 每秒同步(推荐)
# appendfsync always # 每次写入同步(最安全,最慢)
# appendfsync no # 由操作系统决定(最快,风险高)
# AOF 重写时不执行 fsync
no-appendfsync-on-rewrite no
# 自动重写触发条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
安全配置
# 密码认证
requirepass YourStr0ngP@ssword
# 禁用危险命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
rename-command CONFIG "CONFIG_ADMIN_b7a2c4d8"
慢查询配置
# 慢查询日志阈值(微秒,10ms = 10000)
slowlog-log-slower-than 10000
# 慢查询日志最大条数
slowlog-max-len 128
客户端配置
# 最大客户端连接数
maxclients 10000
# 单个客户端输出缓冲区限制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
2.6 多实例部署
在同一台机器上运行多个 Redis 实例:
# 复制配置文件
sudo cp /etc/redis/redis.conf /etc/redis/redis-6380.conf
# 修改关键配置
sudo sed -i 's/port 6379/port 6380/' /etc/redis/redis-6380.conf
sudo sed -i 's|/var/run/redis/redis-server.pid|/var/run/redis/redis-6380.pid|' /etc/redis/redis-6380.conf
sudo sed -i 's|/var/log/redis/redis-server.log|/var/log/redis/redis-6380.log|' /etc/redis/redis-6380.conf
sudo sed -i 's|/var/lib/redis|/var/lib/redis/6380|' /etc/redis/redis-6380.conf
# 创建数据目录
sudo mkdir -p /var/lib/redis/6380
# 启动
redis-server /etc/redis/redis-6380.conf
# 连接
redis-cli -p 6380
2.7 安装验证清单
安装完成后,执行以下命令确认一切正常:
# 1. 服务状态
redis-cli ping # 期望: PONG
# 2. 版本信息
redis-cli INFO server | grep redis_version
# 3. 内存状态
redis-cli INFO memory | grep used_memory_human
# 4. 连接数
redis-cli INFO clients | grep connected_clients
# 5. 写入读取测试
redis-cli SET test:install "ok"
redis-cli GET test:install # 期望: "ok"
redis-cli DEL test:install
# 6. 慢查询(应为空)
redis-cli SLOWLOG GET 5
# 7. 持久化状态
redis-cli LASTSAVE # 返回最近一次 RDB 快照的 Unix 时间戳
redis-cli BGSAVE # 触发一次 RDB 快照
📌 业务场景
场景一:开发团队统一环境
使用 Docker Compose 为团队提供统一的 Redis 开发环境,避免"我的机器上可以跑"的问题。将 docker-compose.yml 纳入版本控制,新人只需 docker-compose up -d 即可开始开发。
场景二:生产环境容量规划
根据业务数据量选择合适的 maxmemory。一般建议:
- 缓存场景:热点数据大小的 1.5-2 倍
- 数据库场景:数据总量不超过物理内存的 70%
- 预留 30% 内存给 fork 子进程(RDB/AOF 重写)
场景三:多环境配置管理
通过环境变量或配置中心动态注入 requirepass、bind 等敏感配置,避免密码硬编码在配置文件中:
# 在 systemd service 中使用 EnvironmentFile
EnvironmentFile=/etc/redis/redis.env
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf --requirepass ${REDIS_PASSWORD}