1.安装方式概览
Redis 支持多种安装方式,根据场景选择:
| 方式 | 适用场景 | 推荐度 |
|---|---|---|
| Docker | 生产环境、快速部署、环境隔离 | ⭐⭐⭐⭐⭐ |
| 包管理器 | 开发测试、快速上手 | ⭐⭐⭐⭐ |
| 源码编译 | 自定义模块、特殊优化、学习原理 | ⭐⭐⭐ |
1.1Docker(最推荐)
docker run -d -p 6379:6379 --name redis --restart unless-stopped \
redis:7 --requirepass your_secure_password_here
提示:生产环境强烈建议使用 Docker 或官方包,避免手动管理依赖和环境污染。
1.2包管理器
# Ubuntu / Debian
sudo apt install redis-server
# Fedora / RHEL
sudo dnf install redis
# macOS
brew install redis
1.3源码编译
适合学习、自定义模块、特殊优化场景。详见下文「2. 源码编译安装」。
2.源码编译安装
2.1安装前提
Redis 源码依赖 gcc、make 和 pkg-config:
# Ubuntu / Debian
sudo apt update && sudo apt install -y gcc make pkg-config wget
# CentOS / RHEL
sudo yum install -y gcc make pkgconfig wget
2.2下载源码
推荐使用官方下载链接,自动指向最新稳定版:
# 最新稳定版
wget https://download.redis.io/redis-stable.tar.gz
# 或指定具体版本,例如 8.6.0
wget https://github.com/redis/redis/archive/refs/tags/8.6.0.tar.gz
2.3解压与编译
# 解压到 /opt
sudo tar -xzf redis-stable.tar.gz -C /opt
cd /opt/redis-stable
# 多核并行编译(nproc 自动获取 CPU 核心数)
make -j$(nproc)
# 安装到指定目录(默认 /usr/local/bin)
sudo make PREFIX=/usr/local/redis install
关键参数说明:
| 参数 | 作用 |
|---|---|
make | 执行 Makefile 里的编译任务,将 .c/.cpp 源代码编译成可执行文件 |
-j$(nproc) | 并行编译,利用全部 CPU 核心加速 |
PREFIX= | 指定安装路径,避免污染系统目录 |
2.4环境变量配置
# 当前用户生效(推荐 ~/.bashrc 或 ~/.zshrc)
echo 'export PATH=/usr/local/redis/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 或系统全局生效(所有用户)
echo 'export PATH=/usr/local/redis/bin:$PATH' | sudo tee /etc/profile.d/redis.sh
sudo source /etc/profile.d/redis.sh
2.5核心可执行文件
安装完成后,/usr/local/redis/bin/ 下会包含以下主要程序:
| 可执行文件 | 用途 |
|---|---|
redis-server | Redis 服务端核心程序 |
redis-cli | 命令行客户端,用于交互式操作 |
redis-benchmark | 性能压测工具 |
redis-check-aof | AOF 持久化文件检查与修复 |
redis-check-rdb | RDB 持久化文件检查与修复 |
redis-sentinel | 哨兵模式启动程序(高可用) |
redis-cli --cluster | Redis 集群管理工具(Redis 5.0+) |
注意:
redis-trib.rb(Ruby 版集群工具)在 Redis 5.0 起已被标记为 deprecate,官方推荐使用redis-cli --cluster替代。
3.启动 Redis
3.1最简启动(仅用于测试)
redis-server
特点:
- 前台运行,日志输出到终端
- 默认端口 6379
- 无配置文件,使用内置默认值
- 无密码、无绑定地址(极不安全,仅本地测试)
终端输出示例:
5995:C 16 Feb 2026 11:39:05.040 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
5995:C 16 Feb 2026 11:39:05.040 * Redis version=7.2.4, bits=64, commit=..., just started
5995:C 16 Feb 2026 11:39:05.040 # Warning: no config file specified, using the default config.
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 7.2.4
.-`` .-```. ```\/ _.,_ ''-._ Running in standalone mode
( ' , .-` | `, ) Port: 6379
|`-._`-...-` __...-.``-._|'` _.-'| PID: 5995
`-._ `-.__.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | https://redis.io
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
5995:M 16 Feb 2026 11:39:05.042 * Server initialized
5995:M 16 Feb 2026 11:39:05.043 * Ready to accept connections.
启动后看到经典的 Redis Logo + Ready to accept connections 即表示成功。
安全警告:Redis 7+ 在
protected-mode yes且未设置密码时会输出警告信息,阻止远程连接。
快速连接测试(另开终端):
redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> SET hello world
OK
127.0.0.1:6379> GET hello
"world"
127.0.0.1:6379> EXIT
3.2命令行参数启动(适合临时调试)
通过追加参数可以覆盖默认配置,而无需编写配置文件:
redis-server --port 6380 --logfile 6380.log --daemonize yes --requirepass YOUR_PASSWORD_HERE
常用参数:
--port 6380--daemonize yes--requirepass YOUR_PASSWORD_HERE--bind 127.0.0.1(或内网IP)
3.3配置文件启动(生产环境推荐)
- 准备目录与配置模板(以 6381 为例)
cd /opt/redis-stable # 或源码所在目录
mkdir -p config data
cp redis.conf config/redis-6381.conf
- 修改实例配置
编辑 config/redis-6381.conf,修改或确认以下关键项:
# 以后台守护进程运行(必须)
daemonize yes
# 绑定地址(安全第一!只允许本地,或改为内网IP)
bind 127.0.0.1
# 端口
port 6381
# 设置密码(强烈建议!请替换为强密码)
requirepass YOUR_PASSWORD_HERE
# 日志文件路径
logfile "/opt/redis-stable/data/6381.log"
# 数据目录(RDB/AOF 文件存放位置)
dir "/opt/redis-stable/data/"
# 保护模式(默认开启,防止外网无密码访问)
protected-mode yes
- 目录授权
chmod 755 /opt/redis-stable/data
- 启动与验证
redis-server /opt/redis-stable/config/redis-6381.conf
- 验证
redis-cli -h 127.0.0.1 -p 6381 -a YOUR_PASSWORD_HERE PING
# 预期输出:PONG
其他几种验证是否启动的方式:
ps -ef | grep redis
ps -ef | grep redis | grep 6381
ps -ef | grep redis-server | grep -v grep
ss -antpl | grep redis
日志查看:tail -f /opt/redis-stable/data/6381.log
4.Systemd 系统服务启动(现代 Linux 推荐方式)
在 CentOS 7+ / Ubuntu 16.04+ 中,强烈推荐使用 systemd 来管理 Redis 进程。它不仅能实现开机自启,还能在进程崩溃时自动拉起。
4.1前置准备
在使用 systemd 接管前,必须确保基础环境和权限正确,否则极易导致启动失败:
- 清理遗留进程:确保之前手动测试的 Redis 进程已关闭,释放端口,防止
Address already in use报错。
# 查找残留进程(优先使用 SIGTERM 优雅停止)
ps -ef | grep redis-server | grep -v grep
kill <PID> # SIGTERM,等待进程自行清理
# 仅在进程无响应时使用强制终止
# kill -9 <PID>
- 创建专属用户:出于安全考虑,必须使用非 root 用户运行 Redis。
sudo useradd -r -s /sbin/nologin redis
- 目录授权:将 Redis 安装及数据目录的所有权交给
redis用户。
sudo chown -R redis:redis /opt/redis-stable
sudo chown -R redis:redis /usr/local/redis
4.2编写 Systemd 服务文件
创建并编辑服务文件:/etc/systemd/system/redis@.service。
提示:文件名中的
@允许我们通过redis@6381这种方式动态传入端口号(即文件中的%i变量),非常适合单机多实例部署。
[Unit]
Description=Redis In-Memory Data Store on port %i
After=network.target
[Service]
# 解决 Redis 7+ 对 Locale 校验严格导致后台启动直接 Crash 的问题
Environment="LC_ALL=C"
# 即使 redis.conf 写了 daemonize yes,systemd 管理时也必须强制前台运行
ExecStart=/usr/local/redis/bin/redis-server /opt/redis-stable/config/redis-%i.conf --daemonize no
ExecStop=/usr/local/redis/bin/redis-cli -p %i -a YOUR_PASSWORD_HERE shutdown
Restart=always
User=redis
Group=redis
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
4.3启动与管理命令
每次修改 .service 文件后,需重新加载 systemd 配置:
sudo systemctl daemon-reload
常用管理命令:
# 启动 6381 实例
sudo systemctl start redis@6381
# 设置开机自启
sudo systemctl enable redis@6381
# 查看运行状态
sudo systemctl status redis@6381
# 查看详细启动日志(排错必备)
sudo journalctl -u redis@6381 -n 50 --no-pager
4.4常见启动报错排查
如果 sudo systemctl status redis@6381 显示 failed,请重点排查:
| 错误特征 | 可能原因 | 解决方案 |
|---|---|---|
status=217/USER | 系统中不存在配置文件里指定的运行用户 | 执行 sudo useradd -r -s /sbin/nologin redis 创建用户 |
Failed to configure LOCALE | systemd 剥离了环境变量,Redis 7+ 校验字符集失败 | 在 [Service] 区块添加 Environment="LC_ALL=C" |
Address already in use | 端口已被原有手动启动的 Redis 占用 | 先 kill <PID> 优雅停止,再重试 |
status=1/FAILURE 且提示 PID 文件无权限 | pidfile 路径当前用户无权写入 | 将 redis.conf 中的 pidfile 改为已授权目录(如 /opt/redis-stable/data/) |
提示:若触发 systemd 的启动频率限制(
start request repeated too quickly),修复问题后执行sudo systemctl reset-failed redis@6381.service重置状态,再重新start。
5.自动化安装脚本
以下脚本实现了一键编译安装 + 多实例 systemd 管理,适配 CentOS / Ubuntu:
#!/bin/bash
# ==========================================================
# Redis 自动化安装与单机多实例配置脚本 (适配 CentOS/Ubuntu)
# 依赖: bash 4+, sudo 权限
# ==========================================================
set -euo pipefail
# --- 变量配置区 ---
REDIS_PORT="${1:-6379}" # 默认端口,可通过参数传入
REDIS_PASS="${REDIS_PASS:-YOUR_SECURE_PASSWORD}" # 密码,也可通过环境变量覆盖
REDIS_SRC_URL="https://download.redis.io/redis-stable.tar.gz"
REDIS_VERSION="redis-stable"
REDIS_BASE_DIR="/opt/redis-stable"
REDIS_BIN_DIR="/usr/local/redis"
# -----------------
echo "========== 开始安装 Redis (端口: $REDIS_PORT) =========="
# 0. 检查 root 权限
if [ "$(id -u)" -ne 0 ]; then
echo "错误: 请使用 root 用户或 sudo 执行此脚本。"
exit 1
fi
# 1. 安装编译依赖
echo "[1/8] 安装编译依赖..."
if command -v apt-get >/dev/null; then
apt-get update -y && apt-get install -y gcc make wget pkg-config
elif command -v yum >/dev/null; then
yum install -y gcc make wget pkgconfig
elif command -v dnf >/dev/null; then
dnf install -y gcc make wget pkgconfig
fi
# 2. 创建专用用户
echo "[2/8] 创建 redis 系统用户..."
if ! id "redis" &>/dev/null; then
useradd -r -s /sbin/nologin redis
echo "用户 redis 创建成功。"
else
echo "用户 redis 已存在,跳过。"
fi
# 3. 下载与编译安装
echo "[3/8] 下载并编译 Redis..."
if [ -f "$REDIS_BIN_DIR/bin/redis-server" ]; then
echo "检测到 Redis 已安装 ($REDIS_BIN_DIR),跳过编译步骤。"
else
cd /tmp
wget -qO redis-stable.tar.gz "$REDIS_SRC_URL"
tar -xzf redis-stable.tar.gz
rm -rf "$REDIS_BASE_DIR"
mv redis-stable "$REDIS_BASE_DIR"
cd "$REDIS_BASE_DIR"
make -j$(nproc)
make PREFIX="$REDIS_BIN_DIR" install
# 配置全局环境变量
echo "export PATH=$REDIS_BIN_DIR/bin:\$PATH" > /etc/profile.d/redis.sh
export PATH="$REDIS_BIN_DIR/bin:$PATH"
echo "编译安装完成。"
fi
# 4. 创建目录
echo "[4/8] 初始化目录结构..."
mkdir -p "$REDIS_BASE_DIR/config"
mkdir -p "$REDIS_BASE_DIR/data"
# 5. 生成实例配置文件
echo "[5/8] 生成配置文件: redis-${REDIS_PORT}.conf..."
cat > "$REDIS_BASE_DIR/config/redis-${REDIS_PORT}.conf" <<EOF
# Redis 实例 ${REDIS_PORT} 配置文件
daemonize no
bind 127.0.0.1
port ${REDIS_PORT}
requirepass ${REDIS_PASS}
logfile "${REDIS_BASE_DIR}/data/${REDIS_PORT}.log"
dir "${REDIS_BASE_DIR}/data/"
protected-mode yes
pidfile "${REDIS_BASE_DIR}/data/redis-${REDIS_PORT}.pid"
EOF
# 6. 权限设置
echo "[6/8] 设置目录权限..."
chown -R redis:redis "$REDIS_BASE_DIR"
chown -R redis:redis "$REDIS_BIN_DIR"
chmod 755 "$REDIS_BASE_DIR/data"
# 7. 配置 Systemd 服务
echo "[7/8] 配置 Systemd 模板服务..."
if [ ! -f "/etc/systemd/system/redis@.service" ]; then
cat > /etc/systemd/system/redis@.service <<EOF
[Unit]
Description=Redis In-Memory Data Store on port %i
After=network.target
[Service]
Environment="LC_ALL=C"
ExecStart=${REDIS_BIN_DIR}/bin/redis-server ${REDIS_BASE_DIR}/config/redis-%i.conf --daemonize no
ExecStop=${REDIS_BIN_DIR}/bin/redis-cli -p %i -a '${REDIS_PASS}' shutdown
Restart=always
User=redis
Group=redis
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
echo "Systemd 服务文件已创建。"
else
echo "Systemd 服务文件已存在,跳过。"
fi
# 8. 启动服务
echo "[8/8] 启动 Redis 实例 ${REDIS_PORT}..."
if ss -tlnp | grep -q ":${REDIS_PORT} "; then
echo "警告: 端口 ${REDIS_PORT} 已被占用,尝试停止旧进程..."
fuser -k -9 "${REDIS_PORT}/tcp" 2>/dev/null || true
sleep 2
fi
systemctl reset-failed "redis@${REDIS_PORT}.service" 2>/dev/null || true
systemctl enable "redis@${REDIS_PORT}.service"
systemctl restart "redis@${REDIS_PORT}.service"
echo ""
echo "========== 安装完成! =========="
echo " 状态检查: sudo systemctl status redis@${REDIS_PORT}"
echo " 连接测试: redis-cli -p ${REDIS_PORT} -a '${REDIS_PASS}' PING"
echo " 查看日志: sudo journalctl -u redis@${REDIS_PORT} -f"
使用方法:
- 一键安装(默认端口 6379):
chmod +x install_redis.sh
sudo ./install_redis.sh
- 快速横向扩展(秒开新实例):
因为你在笔记里巧妙地使用了
@模板和端口参数化,所以如果之后想在同一台机器上再开一个6382和6383实例,只需执行:
sudo ./install_redis.sh 6382
sudo ./install_redis.sh 6383
- 覆盖密码:
sudo REDIS_PASS="my_secret_pass" ./install_redis.sh 6383
说明:首次执行会编译 Redis,后续执行相同端口时会跳过编译步骤,直接生成配置并启动。
6.生产环境安全检查清单
必须配置
| 配置项 | 推荐值 | 说明 |
|---|---|---|
requirepass | 强密码 | 禁止空密码运行 |
bind | 127.0.0.1 或内网 IP | 限制访问来源 |
protected-mode | yes | 开启保护模式 |
推荐配置
- 内存限制:设置
maxmemory和maxmemory-policy(如allkeys-lru) - 持久化:根据业务需求选择 RDB、AOF 或两者结合
- 慢查询日志:开启
slowlog-log-slower-than监控性能瓶颈 - 日志轮转:配置
logrotate避免日志文件无限增长 - 监控告警:接入 Prometheus + Grafana 或 Redis Exporter
应避免
- 生产环境使用默认无密码启动
- 将 Redis 暴露在公网(除非使用 TLS + 防火墙)
- 使用
flushall/del *等危险命令(通过rename-command禁用) - 在单台机器上无限制地启动过多实例(注意内存和文件描述符限制)
7.更新日志
- 2026-07-03:全面优化文档结构,修正 Redis 版本(7.x)、修复过时命令(netstat → ss)、消除硬编码密码、补充生产安全检查清单、改进脚本健壮性(
set -euo pipefail)。 - 2026-02-16:升级至 Redis 7.2.4,更新下载链接、配置建议、安全提醒。