一、Redis安装简介

Redis 是一款高性能的键值对数据库,广泛应用于缓存、会话存储、消息队列等场景。本教程提供 Linux 原生编译安装Docker 容器化安装 两种方案,包含详细配置、开机自启、连接测试及安全优化,适用于开发环境和生产环境。

前置说明​

  • 操作系统:CentOS 7/8、RHEL 7/8 或支持 Docker 的 Linux 发行版​

  • 权限要求:所有操作需使用 root 用户或 sudo 权限​

  • 网络要求:确保服务器开放 6379 端口(Redis 默认端口),生产环境建议限制访问来源

二、Linux 原生编译安装 Redis

Redis 基于 C 语言开发,编译需依赖 GCC 编译器和内存分配库,先执行以下命令安装依赖:

# 安装 GCC 编译器和 jemalloc 内存分配库(优化内存使用)
yum install -y gcc-c++ jemalloc-devel autoconf automake
# 验证 GCC 版本(需 >= 9.0版本)
gcc -v

若执行 gcc -v 提示 "command not found",说明 GCC 未安装成功,可尝试 yum install -y gcc 单独安装。

升级GCC至9.0版本

# 安装 scl 源
yum install -y centos-release-scl scl-utils-build
# 安装9版本的 gcc、gcc-c++、gdb工具链
yum install -y devtoolset-9-toolchain
# 临时覆盖系统原有的 gcc 引用
scl enable devtoolset-9 bash
# 查看 GCC 版本
gcc -v

2.1 下载与编译安装​

步骤 1:下载 Redis 稳定版​

推荐使用官方稳定版(redis-stable 为最新稳定分支,包含安全补丁):

# 下载官方稳定版 Redis​
wget https://download.redis.io/redis-stable.tar.gz​
# 若 wget 未安装,先执行:yum install -y wget

步骤 2:解压与编译

# 解压压缩包(解压后生成 redis-stable 目录)
tar -xzvf redis-stable.tar.gz
# 进入源码目录
cd redis-stable
# 编译源码(若编译报错,检查 GCC 版本或依赖是否安装完整)
make
# 编译完成后,验证是否生成可执行文件(src 目录下会有 redis-server、redis-cli)
ls src/redis-server src/redis-cli

步骤 3:指定目录安装​

将编译后的文件安装到 /usr/local/redis(统一软件安装目录,便于管理):

# 创建安装目录(-p 确保父目录不存在时自动创建)
mkdir -p /usr/local/redis
# 安装 Redis 到指定目录
make PREFIX=/usr/local/redis install
# 验证安装结果(查看 bin 目录下的核心命令)
ls /usr/local/redis/bin

安装成功后,/usr/local/redis/bin 会包含:redis-server(服务端)、redis-cli(客户端)、redis-benchmark(性能测试工具)等。​

2.2 配置文件优化(redis.conf)​

Redis 配置文件默认在源码目录(redis-stable/redis.conf),需复制到系统配置目录并修改关键参数:​

步骤 1:复制配置文件到系统目录

# 复制默认配置文件到 /etc 目录(便于统一管理配置)
cp redis-stable/redis.conf /etc/redis.conf
# 编辑配置文件
vim /etc/redis.conf

步骤 2:核心配置参数详解与修改

配置项 说明 推荐配置(生产环境)
daemonize 是否以守护进程运行(后台运行),默认 no daemonize yes
bind 绑定访问 IP,默认 127.0.0.1(仅本地访问) 内网部署:bind 内网IP;公网部署:bind 0.0.0.0(配合密码 + 防火墙)
port 监听端口,默认 6379(黑客常用扫描端口) 建议修改为非默认端口(如 6380)
databases 数据库数量,默认 16 个(0-15) 保持默认 databases 16
save RDB 持久化触发条件(默认 3 条规则,满足任一即生成快照) 保持默认:save 900 1 save 300 10 save 60 10000
dbfilename RDB 快照文件名,默认 dump.rdb 保持默认或自定义
dir 数据文件(RDB/AOF)存储路径,默认当前目录 dir /var/lib/redis(需先创建目录:mkdir -p /var/lib/redis)
requirepass 客户端连接密码(默认无密码,生产环境必须设置) requirepass YourStrongPass123!(强密码:字母 + 数字 + 特殊字符)
maxclients 最大客户端连接数,默认 10000 按服务器配置调整:maxclients 20000
maxmemory Redis 最大使用内存(默认无限制,易导致服务器内存耗尽) 建议设置为物理内存的 50%-70%,如 maxmemory 4gb
maxmemory-policy 内存满时的数据淘汰策略(默认 noeviction:拒绝写入) maxmemory-policy allkeys-lru(移除最近最少使用的键)
protected-mode 保护模式(默认 yes,仅允许本地访问或密码访问) 保持 yes(增强安全性)

必改配置(最小化配置)

# 1. 后台运行
daemonize yes
# 2. 允许所有 IP 访问(公网部署需配合密码和防火墙)
bind 0.0.0.0
# 3. 修改默认端口(避免扫描)
port 6380
# 4. 设置强密码
requirepass Redis@2025!
# 5. 限制最大内存(假设服务器 8GB 内存,设置 4GB)
maxmemory 4gb
# 6. 内存淘汰策略
maxmemory-policy allkeys-lru
# 7. 数据存储路径(需提前创建目录)
dir /var/lib/redis
# 8. 启用 AOF 持久化(比 RDB 更可靠,避免数据丢失)
appendonly yes
appendfsync everysec

2.3 配置开机自启(systemd 服务)

步骤 1:创建系统服务文件

# 创建 redis.service 服务文件
vim /etc/systemd/system/redis.service

步骤 2:写入服务配置

[Unit]
Description=Redis High Performance Key-Value Store
After=network.target  # 网络启动后再启动 Redis
Documentation=https://redis.io/documentation  # 文档地址

[Service]
Type=forking  # 后台运行模式(对应 daemonize yes)
ExecStart=/usr/local/redis/bin/redis-server /etc/redis.conf  # 启动命令(指定配置文件)
ExecStop=/usr/local/redis/bin/redis-cli -p 6380 -a Redis@2025! shutdown  # 停止命令(需匹配端口和密码)
Restart=always  # 服务异常退出时自动重启
PrivateTmp=true  # 独立临时目录,增强安全性

[Install]
WantedBy=multi-user.target  # 多用户模式下生效

步骤 3:启用服务并设置开机自启

# 重载 systemd 服务(使配置生效)
systemctl daemon-reload
# 启动 Redis 服务
systemctl start redis.service
# 设置开机自启
systemctl enable redis.service
# 验证服务状态(显示 active (running) 即为成功)
systemctl status redis.service

2.4 连接测试与常用命令

本地连接(服务器内部)

# 进入 Redis 客户端(需指定端口和密码,若修改了默认端口)
/usr/local/redis/bin/redis-cli -p 6380 -a Redis@2025!

# 测试命令(返回 PONG 表示连接成功)
127.0.0.1:6380> PING
PONG

# 数据操作示例
127.0.0.1:6380> set username admin  # 设置键值对
OK
127.0.0.1:6380> get username  # 获取值
"admin"
127.0.0.1:6380> keys *  # 查看所有键
1) "username"
127.0.0.1:6380> exit  # 退出客户端

远程连接(跨服务器访问)

# 语法:redis-cli -h 目标IP -p 端口 -a 密码
redis-cli -h 192.168.1.100 -p 6380 -a Redis@2025!

# 测试连接
192.168.1.100:6380> PING
PONG

远程连接失败排查:

① 目标服务器防火墙是否开放 6380 端口;

② Redis 配置 bind 是否允许远程 IP;

③ 密码是否正确。​

常用系统命令

# 启动 Redis
systemctl start redis.service
# 停止 Redis
systemctl stop redis.service
# 重启 Redis
systemctl restart redis.service
# 查看 Redis 运行日志
journalctl -u redis.service -f
# 关闭开机自启
systemctl disable redis.service

2.5 常见问题排查​

  1. 编译报错 error: jemalloc/jemalloc.h: No such file or directory​

原因:jemalloc 库未安装成功,解决方案:

yum install -y jemalloc-devel
# 或使用系统默认内存分配库编译
make MALLOC=libc
  1. 启动失败 Job for redis.service failed because the control process exited with error code​

原因:配置文件错误或端口被占用,解决方案:

# 1. 检查端口占用
netstat -tulpn | grep 6380
# 2. 查看错误日志
journalctl -u redis.service
# 3. 验证配置文件语法
/usr/local/redis/bin/redis-server /etc/redis.conf --check
  1. 远程连接失败

# 1. 开放防火墙端口(以 firewalld 为例)
firewall-cmd --add-port=6380/tcp --permanent
firewall-cmd --reload
# 2. 确认 Redis 配置 bind 为 0.0.0.0 或允许远程 IP
# 3. 关闭 SELinux(若启用)
setenforce 0

三、Docker 容器化安装 Redis(推荐)

Docker 安装无需编译,环境隔离性好,部署效率高,适合快速搭建和集群环境。

前置条件:

已安装 Docker 环境(若未安装,先执行以下命令)

# 安装 Docker(CentOS 7/8)
yum install -y docker
# 启动 Docker 并设置开机自启
systemctl start docker
systemctl enable docker
# 验证 Docker 版本
docker --version

3.1 拉取 Redis 镜像​

推荐使用官方镜像,指定版本(如 8.2.3):

# 拉取指定版本
docker pull redis:8.2.3
# 或拉取最新版​
docker pull redis:latest​
# 查看已拉取镜像​
docker images | grep redis

3.2 准备配置文件和数据目录​

为了持久化数据和自定义配置,需在宿主机创建目录并挂载到容器:

# 创建数据目录(存储 Redis 数据)和配置目录(存储自定义配置)
mkdir -pv /dadong/data/redis /dadong/configs/redis
# 授权目录权限(避免容器访问权限不足)
chmod 755 -R /dadong/data/redis /dadong/configs/redis

自定义 Redis 配置文件​

创建 redis.conf 配置文件(包含持久化、安全、内存限制等关键配置):

tee /dadong/configs/redis/redis.conf <<-'EOF'
# 基础配置
bind 0.0.0.0  # 允许所有 IP 访问
port 6379  # 容器内端口(可保持默认,通过 Docker 映射到宿主机其他端口)
protected-mode yes  # 启用保护模式
timeout 300  # 空闲连接超时时间(5分钟)

# 持久化配置(同时启用 RDB 和 AOF,数据更安全)
save 900 1
save 300 10
save 60 10000
appendonly yes  # 启用 AOF 持久化
appendfsync everysec  # 每秒同步一次 AOF 日志
dir /data  # 容器内数据存储路径(对应宿主机 /dadong/data/redis)

# 安全配置
requirepass Redis@2025!  # 强密码
rename-command FLUSHALL ""  # 禁用清空所有数据库命令(防止误操作)
rename-command FLUSHDB ""   # 禁用清空当前数据库命令
rename-command CONFIG ""    # 禁用修改配置命令

# 内存配置
maxmemory 2gb  # 限制容器最大使用内存(根据服务器配置调整)
maxmemory-policy allkeys-lru  # 内存淘汰策略
EOF

3.3 启动 Redis 容器​

使用 docker run 命令启动容器,挂载宿主机目录和配置文件:

docker run -d \
  --name redis \  # 容器名称(自定义)
  -p 6380:6379 \  # 端口映射:宿主机 6380 端口 -> 容器 6379 端口
  -v /dadong/data/redis:/data \  # 挂载数据目录(持久化数据)
  -v /dadong/configs/redis/redis.conf:/etc/redis/redis.conf \  # 挂载配置文件
  --restart=always \  # 容器退出时自动重启(包括服务器开机后)
  --memory=2g \  # 限制容器最大内存(与配置文件 maxmemory 一致)
  redis:6.2.7 \  # 使用的镜像名称和版本
  redis-server /etc/redis/redis.conf  # 启动命令(指定自定义配置文件)

参数说明:

  • -d:后台运行容器(守护进程模式)

  • --name redis:给容器命名,便于后续操作(如 docker stop redis

  • -p 6380:6379:端口映射,宿主机端口可自定义(避免与其他服务冲突)

  • -v 宿主机目录:容器目录:目录挂载,实现数据持久化(容器删除后数据仍保存在宿主机)

  • --restart=always:容器自启策略(开机自启、异常重启)

  • --memory=2g:限制容器内存使用(防止容器耗尽服务器内存)

  • redis-server /etc/redis/redis.conf:容器启动命令,指定使用自定义配置文件

3.4 容器管理与连接测试

# 查看容器运行状态(STATUS 为 Up 表示运行中)
docker ps | grep redis

# 启动容器
docker start redis

# 停止容器
docker stop redis

# 重启容器
docker restart redis

# 查看容器日志(排查启动失败问题)
docker logs -f redis

# 进入容器内部(如需调试)
docker exec -it redis /bin/bash

连接测试​

方式 1:使用宿主机 redis-cli(需安装 Redis 客户端)

# 连接命令:指定宿主机端口和密码
redis-cli -p 6380 -a Redis@2025!

# 测试连接
127.0.0.1:6380> PING
PONG

方式 2:使用容器内 redis-cli(无需额外安装客户端)

# 直接在容器内执行 redis-cli
docker exec -it redis redis-cli -a Redis@2025!

# 测试数据操作
127.0.0.1:6379> set test_key "docker_redis"
OK
127.0.0.1:6379> get test_key
"docker_redis"

方式 3:远程连接(跨服务器)

# 语法:redis-cli -h 服务器IP -p 宿主机端口 -a 密码
redis-cli -h 192.168.1.100 -p 6380 -a Redis@2025!

3.5 数据持久化说明​

由于已挂载宿主机 /dadong/data/redis 目录到容器 /data,以下数据会持久化到宿主机:​

  • RDB 快照文件(dump.rdb)​

  • AOF 日志文件(appendonly.aof)​

即使删除容器,重新创建时挂载相同目录,数据仍可恢复。

3.6 常见问题排查

  1. 容器启动后立即退出​

原因:配置文件错误或权限不足,解决方案:

# 1. 查看错误日志
docker logs redis
# 2. 检查配置文件语法(进入容器执行)
docker exec -it redis redis-server /etc/redis/redis.conf --check
# 3. 确认宿主机目录权限
chmod 777 -R /dadong/data/redis /dadong/configs/redis
  1. 挂载配置文件不生效​

原因:挂载路径错误或配置文件格式问题,解决方案:

# 确认挂载路径正确(宿主机路径需绝对路径)
docker inspect redis | grep Mounts  # 查看挂载详情
# 重新创建容器(先删除原有容器)
docker rm -f redis
# 重新执行启动命令