一、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 -v2.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 everysec2.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.service2.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.service2.5 常见问题排查
编译报错 error: jemalloc/jemalloc.h: No such file or directory
原因:jemalloc 库未安装成功,解决方案:
yum install -y jemalloc-devel
# 或使用系统默认内存分配库编译
make MALLOC=libc启动失败 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. 开放防火墙端口(以 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 --version3.1 拉取 Redis 镜像
推荐使用官方镜像,指定版本(如 8.2.3):
# 拉取指定版本
docker pull redis:8.2.3
# 或拉取最新版
docker pull redis:latest
# 查看已拉取镜像
docker images | grep redis3.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 # 内存淘汰策略
EOF3.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. 查看错误日志
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挂载配置文件不生效
原因:挂载路径错误或配置文件格式问题,解决方案:
# 确认挂载路径正确(宿主机路径需绝对路径)
docker inspect redis | grep Mounts # 查看挂载详情
# 重新创建容器(先删除原有容器)
docker rm -f redis
# 重新执行启动命令