强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

02 - Redis 安装与配置

Redis 安装与配置

2.1 安装方式总览

方式适用场景难度
Docker(推荐)开发/测试/生产
包管理器(apt/yum)Linux 快速部署⭐⭐
源码编译需要自定义编译选项⭐⭐⭐
HomebrewmacOS 开发
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

⚠️ 安全警告:生产环境务必设置 bindrequirepass,否则 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所有 KeyLRU通用缓存
allkeys-lfu所有 KeyLFU热点数据缓存
volatile-lru有 TTL 的 KeyLRU缓存+持久数据混合
volatile-lfu有 TTL 的 KeyLFU同上,更智能
volatile-ttl有 TTL 的 KeyTTL 最小优先临时数据
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 重写)

场景三:多环境配置管理

通过环境变量或配置中心动态注入 requirepassbind 等敏感配置,避免密码硬编码在配置文件中:

# 在 systemd service 中使用 EnvironmentFile
EnvironmentFile=/etc/redis/redis.env
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf --requirepass ${REDIS_PASSWORD}

🔗 扩展阅读