Logo
活死人の行知路

二、Redis安装与启动


📅 | 📝 1200 字
#redis #DBA

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-serverRedis 服务端核心程序
redis-cli命令行客户端,用于交互式操作
redis-benchmark性能压测工具
redis-check-aofAOF 持久化文件检查与修复
redis-check-rdbRDB 持久化文件检查与修复
redis-sentinel哨兵模式启动程序(高可用)
redis-cli --clusterRedis 集群管理工具(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配置文件启动(生产环境推荐)

  1. 准备目录与配置模板(以 6381 为例)
cd /opt/redis-stable   # 或源码所在目录
mkdir -p config data
cp redis.conf config/redis-6381.conf
  1. 修改实例配置

编辑 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
  1. 目录授权
chmod 755 /opt/redis-stable/data
  1. 启动与验证
redis-server /opt/redis-stable/config/redis-6381.conf
  1. 验证
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 接管前,必须确保基础环境和权限正确,否则极易导致启动失败:

  1. 清理遗留进程:确保之前手动测试的 Redis 进程已关闭,释放端口,防止 Address already in use 报错。
# 查找残留进程(优先使用 SIGTERM 优雅停止)
ps -ef | grep redis-server | grep -v grep
kill <PID>          # SIGTERM,等待进程自行清理
# 仅在进程无响应时使用强制终止
# kill -9 <PID>
  1. 创建专属用户:出于安全考虑,必须使用非 root 用户运行 Redis。
sudo useradd -r -s /sbin/nologin redis
  1. 目录授权:将 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 LOCALEsystemd 剥离了环境变量,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"

使用方法:

  1. 一键安装(默认端口 6379):
chmod +x install_redis.sh
sudo ./install_redis.sh
  1. 快速横向扩展(秒开新实例): 因为你在笔记里巧妙地使用了 @ 模板和端口参数化,所以如果之后想在同一台机器上再开一个 6382 和 6383 实例,只需执行:
sudo ./install_redis.sh 6382
sudo ./install_redis.sh 6383
  1. 覆盖密码:
sudo REDIS_PASS="my_secret_pass" ./install_redis.sh 6383

说明:首次执行会编译 Redis,后续执行相同端口时会跳过编译步骤,直接生成配置并启动。

6.生产环境安全检查清单

必须配置

配置项推荐值说明
requirepass强密码禁止空密码运行
bind127.0.0.1 或内网 IP限制访问来源
protected-modeyes开启保护模式

推荐配置

  • 内存限制:设置 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,更新下载链接、配置建议、安全提醒。