Redis 作为高性能的键值对数据库,在缓存、消息队列、会话存储等场景中应用广泛。很多开发者在 Linux 系统安装 Redis 时,常会遇到依赖缺失、配置报错、无法远程连接等问题。本文以 CentOS 7/8 和 Ubuntu 20.04/22.04 两大主流发行版为例,详细讲解源码安装 Redis 的完整流程,同时梳理常见问题及解决方案,新手也能轻松上手。一、安装前准备
1.1 环境要求
操作系统:CentOS 7/8、Ubuntu 20.04/22.04(64位)
依赖工具:gcc、gcc-c++、make(编译 Redis 源码必需)
网络环境:可访问外网(用于下载 Redis 源码包)
权限:root 或具备 sudo 权限的普通用户(避免权限不足导致安装失败)
1.2 安装依赖工具
根据操作系统类型,执行对应命令安装依赖,若已安装可跳过此步骤。
CentOS 系统
# CentOS 7
sudo yum install -y gcc gcc-c++ make
# CentOS 8(默认使用 dnf 包管理器)
sudo dnf install -y gcc gcc-c++ make
Ubuntu 系统
sudo apt update # 更新软件包列表
sudo apt install -y gcc g++ make
1.3 下载 Redis 源码包
推荐从 Redis 官方网站下载稳定版源码,本文以 Redis 7.2.4(当前最新稳定版)为例,也可根据需求选择其他版本(Redis 官方下载地址)。
# 进入 /usr/local/src 目录(常用源码存放目录)
cd /usr/local/src
# 下载 Redis 7.2.4 源码包
sudo wget https://download.redis.io/releases/redis-7.2.4.tar.gz
# 验证源码包完整性(可选,避免下载损坏)
# 先获取官方校验值,再对比本地包校验值,一致则无问题
md5sum redis-7.2.4.tar.gz
若 wget 命令不存在,可先安装 wget:CentOS 用 sudo yum install -y wget,Ubuntu 用 sudo apt install -y wget。
二、源码编译与安装
2.1 解压源码包
# 解压 tar.gz 包
sudo tar -zxvf redis-7.2.4.tar.gz
# 进入解压后的目录
cd redis-7.2.4
2.2 编译源码
执行 make 命令编译源码,编译过程依赖前面安装的 gcc 工具,若编译报错大概率是依赖缺失或版本过低。
sudo make
常见报错处理:若出现“gcc: error: unrecognized command line option ‘-m64’”,说明 gcc 版本过低,CentOS 7 可通过 sudo yum install -y centos-release-scl && sudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ 安装高版本 gcc,再执行 scl enable devtoolset-9 bash 临时切换版本。
2.3 安装 Redis
编译完成后,执行 make install 命令将 Redis 安装到指定目录(默认安装到 /usr/local/bin,可通过 PREFIX 参数自定义安装目录)。
# 默认安装(推荐,方便后续全局调用命令)
sudo make install
# 自定义安装目录(例如安装到 /usr/local/redis)
# sudo make PREFIX=/usr/local/redis install
安装完成后,可执行 redis-server --version 验证安装,若输出“Redis server v=7.2.4 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=xxxxxx”,说明安装成功。
三、Redis 配置与启动
3.1 配置文件优化
Redis 解压目录下的 redis.conf 是默认配置文件,为了方便管理,建议将其复制到 /etc/redis 目录下(新建该目录),再进行配置修改。
# 新建配置文件目录
sudo mkdir -p /etc/redis
# 复制配置文件到目标目录
sudo cp /usr/local/src/redis-7.2.4/redis.conf /etc/redis/redis.conf
# 编辑配置文件(使用 vim 编辑器,若未安装可先安装:sudo yum install -y vim / sudo apt install -y vim)
sudo vim /etc/redis/redis.conf
按 i 进入编辑模式,修改以下关键配置(根据实际需求调整):
允许后台启动:将 daemonize no 改为daemonize yes(默认前台启动,关闭终端则 Redis 停止)。
绑定地址:将 bind 127.0.0.1 -::1 改为 bind 0.0.0.0(允许所有IP访问,仅内网使用时建议保留默认,增强安全性)。
设置密码:找到# requirepass foobared,去掉注释并修改为 requirepass 你的密码(避免无密码访问,密码建议复杂且牢记)。
修改端口:默认端口 6379,可根据需求修改 port 6379 中的端口号(若修改需记住新端口)。
设置日志目录:添加 logfile /var/log/redis/redis.log(需新建日志目录:sudo mkdir -p /var/log/redis && sudo chown redis:redis /var/log/redis)。
设置数据存储目录:将dir ./ 改为 dir /var/lib/redis(需新建目录:sudo mkdir -p /var/lib/redis && sudo chown redis:redis /var/lib/redis)。
修改完成后,按 Esc,输入 :wq 保存并退出 vim。
3.2 创建 Redis 系统用户
为了安全,建议创建专门的 redis 用户运行 Redis,避免使用 root 用户。
# 创建 redis 用户组和用户
sudo groupadd redis
sudo useradd -g redis -s /sbin/nologin -d /var/lib/redis redis
# 授权目录权限
sudo chown -R redis:redis /var/lib/redis
sudo chown -R redis:redis /var/log/redis
sudo chown -R redis:redis /etc/redis
3.3 启动 Redis 服务
方式一:直接命令启动(临时测试用)
# 以指定配置文件启动
sudo -u redis redis-server /etc/redis/redis.conf
# 检查 Redis 进程
ps -ef | grep redis
# 检查端口占用情况
netstat -tulnp | grep 6379 # 若端口已修改,替换为新端口
若输出包含“redis-server *:6379”,说明启动成功。
方式二:创建系统服务(推荐,支持开机自启)
通过 systemd 管理 Redis 服务,方便启动、停止、重启及开机自启配置。
# 创建服务文件
sudo vim /usr/lib/systemd/system/redis.service
添加以下内容(若自定义安装目录,需修改 ExecStart 路径):
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli -a 你的密码 shutdown # 替换为实际密码
Restart=always
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存退出后,执行以下命令刷新服务、启动 Redis 并设置开机自启:
# 刷新系统服务
sudo systemctl daemon-reload
# 启动 Redis 服务
sudo systemctl start redis
# 查看服务状态
sudo systemctl status redis
# 设置开机自启
sudo systemctl enable redis
# 停止 Redis 服务(如需)
# sudo systemctl stop redis
# 重启 Redis 服务(如需)
# sudo systemctl restart redis
若服务状态显示“active (running)”,说明服务启动正常且配置生效。
四、连接与验证 Redis
4.1 本地连接
# 本地连接 Redis(默认端口,若修改需加 -p 端口号)
redis-cli
# 输入密码(若设置了密码)
127.0.0.1:6379> AUTH 你的密码
# 验证连接成功(执行 ping 命令,返回 PONG 则正常)
127.0.0.1:6379> PING
# 简单操作测试(设置键值对、获取值)
127.0.0.1:6379> SET test_key "hello redis"
127.0.0.1:6379> GET test_key
# 退出连接
127.0.0.1:6379> EXIT
4.2 远程连接
若需远程连接 Redis,需满足两个条件:一是 Redis 配置中 bind 地址设为 0.0.0.0,二是服务器防火墙开放对应端口(默认 6379)。
开放防火墙端口
# CentOS 7(firewalld)
sudo firewall-cmd --zone=public --add-port=6379/tcp --permanent
sudo firewall-cmd --reload
# CentOS 8(firewalld)
sudo firewall-cmd --zone=public --add-port=6379/tcp --permanent
sudo firewall-cmd --reload
# Ubuntu(ufw)
sudo ufw allow 6379/tcp
sudo ufw reload
远程连接命令(Windows/macOS 本地终端或其他 Linux 服务器):
redis-cli -h 服务器IP -p 端口号 -a 密码
# 示例(IP:192.168.1.100,端口:6379,密码:123456)
redis-cli -h 192.168.1.100 -p 6379 -a 123456
五、常见问题及解决方案
5.1 启动失败,提示“Address already in use”
原因:6379 端口被其他进程占用。解决方案:查找占用端口的进程并停止,或修改 Redis 端口。
# 查找占用 6379 端口的进程
sudo lsof -i:6379 或 sudo netstat -tulnp | grep 6379
# 停止对应进程(替换为实际 PID)
sudo kill -9 进程PID
5.2 远程连接失败,提示“Could not connect to Redis at 服务器IP:6379: Connection refused”
原因:1. Redis 未启动;2. bind 地址未设为 0.0.0.0;3. 防火墙未开放端口;4. 服务器安全组未放行端口(云服务器需额外配置)。解决方案:逐一排查上述四点,确保 Redis 正常运行、配置正确、防火墙和安全组放行端口。
5.3 连接后执行命令提示“NOAUTH Authentication required”
原因:设置了 Redis 密码,但连接后未输入密码。解决方案:执行 AUTH 你的密码 验证身份,或连接时直接携带密码(redis-cli -a 密码)。
5.4 重启服务器后 Redis 未自动启动
原因:未设置开机自启,或系统服务配置错误。解决方案:重新配置 systemd 服务,执行 sudo systemctl enable redis 开启开机自启,再验证服务状态。