☰
Redis下载与安装全指南:版本选型、平台差异与生产环境避坑实战
2026/9/28 18:51:31 网站建设 项目流程

最近有个项目要做热点数据的缓存,顺手帮同事把本机的 Redis 环境也装了几轮。聊起这个话题我发现一个有意思的现象:redis下载和redis安装看起来是入门第一步,但不同系统、不同场景下的选型和坑远比想象中多。网上很多教程都是零散的,照着走很容易卡在编译报错、连接失败或者不知道怎么配成系统服务这些地方。这篇文章就是把我装 Redis 的完整过程、版本对比、配置要点和踩坑记录整理出来,目标读者不只是刚入门的新手,也包括准备在生产环境重新部署一遍的人。

1. 安装前的准备与版本选型

1.1 Redis 到底怎么选版本

很多人在下载 Redis 之前根本没想过版本问题,看到官网最新版就直接下载了,这个是第一个坑。Redis 的版本演进其实非常有节奏感,4.0 引入了模块系统,5.0 带来了 Stream 数据结构,6.0 开始支持多线程 IO 和 ACL 权限控制,7.0 引入了 Function 和红黑树内存优化,7.2 之后在集群和可观测性上又做了不少增强。但并不是版本越新越好,生产环境最看重的是稳定性和生态兼容性。

我个人的建议是:如果你是刚学习或者自己搭着玩,直接用当前最新的稳定版没问题,目前 7.2.x 是比较稳妥的选择;如果是生产环境,优先选 6.2.x 或 7.0.x 这种经过了长时间验证的版本系列。原因很简单,Redis 的版本策略里,偶数的次版本号通常是稳定分支,奇数往往是功能分支,像 6.2、7.0、7.2 都属于值得跟进的版本。而有些云厂商的 Redis 服务内核还停留在 5.x / 6.x,如果你本地用了高版本特性,比如 7.0 的 Function,后面迁移到云上反而会带来不必要的麻烦。

下载地址务必认准官方渠道,避免使用不明来源的压缩包或所谓的“优化版”。官方 releases 页面是 https://download.redis.io/releases/,这个目录下所有版本的 tar.gz 都直接可用。还需要注意一个细节:Redis 从 6.0 开始要求编环境具备较新的 GCC,如果服务器是 CentOS 7 这类自带 GCC 4.8 的老系统,直接编译 7.x 大概率会报错,所以版本选择和系统环境是强关联的,不能只看功能列表。

1.2 各平台下载渠道对比

Redis 官方并没有提供 Windows 版本,所有 Windows 下的安装包都是第三方编译或适配的,这一点很多人一开始并不知道。搞清楚各平台的下载渠道,能少走不少弯路。

平台推荐方式说明
Linux(生产)官方源码包编译可定制安装路径、编译参数,性能最好
Linux(快速体验)apt / yum / dnf安装快,但版本可能偏旧
macOSHomebrew一条命令搞定,配置文件位置规范
Windows第三方编译版适合本地开发测试,不适合直接上生产
Windows / macOSDocker 容器隔离环境最干净,几乎没有系统依赖问题

选渠道的时候要记住一个原则:尽量靠近官方发行版。对于 Linux 生产环境,我几乎只用源码编译,因为这样可以把 Redis 安装到独立的目录,比如 /usr/local/redis,配置、数据、日志都放在一起,后期维护和卸载都清晰。包管理器虽快,但版本往往和你预期不一致,有时候还会自动拉起一个 systemd 服务,连配置文件格式都可能有出入。Docker 则是另一个极端,它适合临时起一个实例验证功能,但如果你要用 Redis 做性能压测,容器网络和宿主机的延时差异会干扰判断,这时候还是本地编译的版本更放心。

2. Linux环境下Redis下载与安装

2.1 源码编译安装(推荐生产环境)

先列一遍完整流程,再逐一解释关键点。下面以 Redis 7.2.4 为例。

# 1. 安装编译依赖 # Debian/Ubuntu sudo apt update sudo apt install -y gcc make pkg-config # CentOS/RHEL sudo yum install -y gcc make # 2. 下载源码包并解压 wget https://download.redis.io/releases/redis-7.2.4.tar.gz tar -zxvf redis-7.2.4.tar.gz cd redis-7.2.4 # 3. 编译 make -j 4 # 4. 可选:运行测试(耗时较长,生产建议跑一遍) make test # 5. 指定目录安装 make install PREFIX=/usr/local/redis

第一步的依赖是必须要有的,Redis 源码大部分是 C 语言写的,编译阶段需要 GCC 和 make,pkg-config 用来辅助查找依赖库。如果缺少这些工具,编译会在最开始就报gcc: command not found,后面我会在常见问题里专门说。

第二步下载时我建议固定版本号。用redis-stable.tar.gz这个链接可以拿到当前推荐稳定版,但它的缺点是版本不固定,隔一段时间再下载可能版本就变了。如果你在写自动化部署脚本,固定版本号能让脚本结果可预期,缓存一致性也容易保证。

第三步的make -j 4表示用 4 个并发线程编译,能明显缩短时间。如果机器核心多,可以调整成更大的数字,但要留一点内存余量。编译时如果出现jemalloc.h: No such file or directory,说明系统缺少 libc malloc 兼容层或编译器版本太老,这时候先别急着装依赖,换个思路用make MALLOC=libc跳过 jemalloc 再试。jemalloc 是 Redis 默认的内存分配器,在强调内存碎片的场景下确实有优势,但老系统编译不过去时,libc 版本也能正常跑,只是长期高并发下碎片管理不如 jemalloc 好。

第四步make test很多人会跳。我的建议是生产环境编译完至少跑一遍,它会做单元测试和集成测试,包括各种数据结构的边界情况。一旦有某几个测试用例挂掉,你还可以提前知道这台机器的环境有问题,而不是等到上线后才暴露。测试整体耗时几分钟,和之后出问题排查相比,这点时间花得很值。

第五步安装。注意PREFIX=/usr/local/redis的含义:把可执行文件装到 /usr/local/redis/bin,配置文件不会自动拷贝,需要手动复制。这也是源码安装和包管理器安装最大的差别,目录结构完全自己掌控。

安装完以后,建议把可执行目录加进 PATH,方便后续直接敲 redis-server:

vim /etc/profile.d/redis.sh # 写入 export PATH=/usr/local/redis/bin:$PATH # 加载 source /etc/profile.d/redis.sh

然后创建数据目录和配置文件目录,把源码包里的默认配置复制过去:

mkdir -p /usr/local/redis/{etc,data,logs} cp redis-7.2.4/redis.conf /usr/local/redis/etc/

这里我习惯把目录建全,即使conf里某些参数暂时用不到,后续调优时不用再颠簸路径。另外还需要单独建一个 redis 系统用户,并给数据目录授权,避免让 Redis 进程以 root 身份跑。安全运维的基本要求,Redis 之前出过多起因为以 root 启动并且没设密码导致被入侵挖矿的事故,这个习惯越早养成越好。

useradd -r -s /sbin/nologin redis chown -R redis:redis /usr/local/redis

2.2 包管理器安装(适合快速上手)

如果你想快速装一个 Redis 体验一下,不想折腾编译过程,包管理器是最省事的选择。

# Debian/Ubuntu sudo apt install -y redis-server # CentOS/RHEL 8+ sudo dnf install -y redis # CentOS 7 需要先启用 EPEL 或 Remi sudo yum install -y epel-release sudo yum install -y redis

包管理器安装的最大特点是“开箱即用”:安装完系统一般会自动创建 redis 用户、配置文件、数据目录和 systemd 服务,直接systemctl start redis-server就能起来。但便宜没好货,它的问题也很明显。首先,Ubuntu 的 apt 仓库里 redis-server 版本通常落后官方一两个大版本,如果你需要用到新版特性,就得借助第三方 PPA。其次,CentOS 自带仓库里的 redis 版本非常老,3.2 是默认版本,连 ACL 都不支持,所以必须用 EPEL 才行。再有就是配置文件位置不统一,Debian 系放在 /etc/redis/redis.conf,RedHat 系在 /etc/redis.conf,如果习惯了/etc/redis/redis.conf,一不小心就会改错。

还有一个容易忽略的细节:包管理器自带的 Redis 服务可能和源码编译的版本冲突。同时装了两种,你又启动同一个端口,那必然报Address already in use。所以不管用哪种安装方式,先确认当前系统是否已经存在 Redis 进程:

ps -ef | grep redis ss -lntp | grep 6379

如果已经有残留进程,要么停掉再装,要么换端口。尤其是走了源码编译之后再执行 apt install,两个版本的二进制都会出现在系统里,优先级和配置文件的混乱程度绝对超乎想象。包管理器更适合本机临时体验,真到了生产环境,还是源码编译或者用官方提供的配置方式更可靠。

3. Windows与macOS环境下的安装差异

3.1 Windows没有官方版本怎么办

每次有人在 Windows 上问我 Redis 怎么装,我都会先反问一句:你知道 Redis 官方没有 Windows 版吗?这不是抖机务,而是很重要的事实。官方文档明确不支持 Windows,目前网上能搜到的 msi 安装包基本都是第三方维护的移植版,比如 tporadowski/redis 这个项目,它维护了基于 Redis 5.0 和 7.0 的 Windows 分支。这类版本对于本地日常学习、写 Demo、验证数据结构完全够用,但我不建议你的生产服务跑在它上面。

Windows 本地安装的通用步骤:

# 1. 下载 zip 压缩包并解压 # 推荐 tporadowski/redis 的 releases 页面,选 redis-7.0.x.zip # 2. 进入解压目录,启动服务 redis-server.exe # 3. 另开一个 cmd / PowerShell 窗口测试 redis-cli.exe ping

启动后的输出里会出现port: 6379,看到它就说明服务已经跑起来了。如果想把 Redis 注册成 Windows 服务,让它在后台运行并在开机时自启动,可以用安装目录自带的redis-server --service-install命令。注册成功后再通过服务管理器启动。注意,Windows 版没有 redis.conf 的默认处理,通常解压目录里有一个 redis.windows-service.conf,注册服务时直接指定它更靠谱。

除了第三方编译版,Windows 上还有两个更稳妥的路线。第一个是 WSL,装上 Ubuntu 子系统之后,直接用 Linux 的源码编译或 apt 安装,等于把整个 Redis 放进真实的 Linux 环境里跑,和服务器行为完全一致,非常适合本地调试和生产环境对标。第二个是 Docker Desktop,一句docker run -d --name redis -p 6379:6379 redis:7.2就能把官方镜像拉起来,环境干净、避免污染宿主机系统。WSL 和 Docker 方案都需要 Windows 10/11 专业版或企业版,家庭版开启 Hyper-V 或 WSL2 要麻烦一些,但和编译那些换汤不换药的问题相比,它们给你的确定感更强。

3.2 macOS 的安装

macOS 用户安装 Redis 基本绕不开 Homebrew。这个包管理器虽然没有包管理器“原教旨”那么干净,但 macOS 本来就没有官方包,Homebrew 已经是事实标准。

brew update brew install redis

装完之后可执行文件会自动链接到/opt/homebrew/bin/redis-server(Apple Silicon 路径)或/usr/local/bin/redis-server,直接在终端敲redis-server --version就能确认。配置文件位置是/opt/homebrew/etc/redis.conf,注意不是 /etc/redis.conf,这个路径很多人找不到。

启动有两种方式:

# 前台启动,终端锁定在当前进程上 redis-server /opt/homebrew/etc/redis.conf # 后台服务的方式,注册到 launchd brew services start redis

我更喜欢brew services start redis这种方式,因为它在开机时会自动拉起,而且日志统一交给系统管理,用brew services stop redis就能干净地停掉。前台启动适合测试配置是否正确,比如刚修改了 requirepass,前台启动一眼就能看到加载日志和报错。

brew install redis装的版本不一定是最新,但一般不会太旧。如果你的项目明确需要某个特定版本,Homebrew 也支持直接从源码构建,brew install redis@7.2这种形式可以指定版本。macOS 本地跑 Redis 最大的价值是开发和测试时的环境一致性,尤其做 Python/Node/Java 后端时,本地直接用 brew 起一个 Redis,不用每次往测试服务器上扔代码才能跑通。

4. 安装后的配置、验证与开机自启

4.1 检查安装是否成功

启动 Redis 之前先检查版本,确认二进制可用:

redis-server --version

如果命令能正常输出版本号,比如Redis server v=7.2.4 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=...,说明主体安装已经成功。但版本号只是第一步,真正验证服务可用要靠客户端:

# 前台或后台启动 Redis,比如 redis-server /usr/local/redis/etc/redis.conf # 另一个终端执行 ping redis-cli ping # 返回 PONG 表示服务正常

如果返回的是PONG,说明客户端和服务器已经成功建立了连接。这里有个细节容易被忽略:如果 redis.conf 里设置了requirepass,直接 ping 就会报NOAUTH Authentication required,这时需要先redis-cli -a 你的密码进入授权,或者用AUTH 密码命令手动授权。

停止 Redis 也有讲究。很多人习惯直接kill -9 <pid>,这对 Redis 来说是危险操作。Redis 是内存型数据库,虽然它支持持久化,但突然杀掉进程在后端磁盘上容易留下不完整的 RDB/AOF 状态,极端情况会造成数据丢失。正确关闭方式是使用redis-cli shutdown,它会触发正常的持久化流程,把内存数据完整落盘后再退出。如果是通过 systemd 启动的,那就用systemctl stop redis。

4.2 配置文件的核心参数

Redis 安装好后,默认配置只适合本地体验,不能直接上生产。密码、绑定地址、最大内存、持久化策略这几项是必须调整的。

配置项默认值推荐设置说明
bind127.0.0.1 -::1内网IP或127.0.0.1只允许本机访问,避免暴露公网
port63796379端口,注意和已有服务冲突
protected-modeyesyes保护模式,无密码且公网访问时拒绝连接
daemonizenoyes设为 yes 后台运行
requirepass无自定义强密码生产必设,哪怕只在内网
maxmemory无限制依据服务器内存防止 Redis 吃光机器内存
maxmemory-policynoevictionallkeys-lru内存触顶后的淘汰策略
appendonlynoyes开启 AOF 持久化
appendfsynceveryseceverysecAOF 刷盘频率,兼顾性能和数据安全

bind是第一个要改的。如果保持默认的 127.0.0.1,外部机器就算有密码也连不上;如果要让其他服务器访问,需要把实际内网 IP 加进来。这里不建议直接配置0.0.0.0,尤其在没有密码的情况下,等于把 Redis 完整暴露在网络上。用公网服务器的人尤其要小心,扫描器扫到 6379 端口几乎可以在几分钟内完成爆破。

protected-mode yes是 Redis 的自我防御机制:如果前面没设密码,而且 bind 配置允许外部访问,那么外部连接会被拒绝。这个默认值是好的,但你如果同时修改了 bind 和 requirepass 之后发现外部还是连不上,就要检查是不是 protected-mode 还在拦截。

maxmemory重要性很高。很多团队上线 Redis 时不设上限,等数据量增长到内存溢出,再想扩充机器或分批迁移就要加班。根据经验,一台 8G 内存的服务器,Redis 的 maxmemory 建议设 4G 到 5G,留出给操作系统和调整空间。maxmemory-policy配合使用,allkeys-lru是常用策略:内存满时优先淘汰最久没被访问的键,适合做缓存场景;noeviction则直接拒绝写入请求,适合做消息队列或需要严格保证数据不丢的场景。

appendonly yes是持久化关键。默认情况 Redis 只做 RDB 快照,可能丢失最近几分钟数据;打开 AOF 后追加日志文件,最多按照 appendfsync 的周期丢失 1 秒数据。对大多数业务来说,everysec是性能和数据安全之间的平衡点。生产环境尽量两者都开,我习惯的做法是 AOF + RDB 同时开启,RDB 负责快速恢复大文件,AOF 负责补足最后一次快照之后的数据。

4.3 systemd 服务与开机自启

源码编译装的 Redis 默认没有 systemd 服务,需要自己写一个 unit 文件。新建/etc/systemd/system/redis.service:

[Unit] Description=Redis Server After=network.target [Service] User=redis Group=redis Type=forking ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf ExecStop=/usr/local/redis/bin/redis-cli -p 6379 shutdown Restart=always RestartSec=3 PrivateTmp=true [Install] WantedBy=multi-user.target

这里Type=forking的含义是:redis-server 启动时会以守护进程模式 fork 出一个子进程,父进程先退出,systemd 认为服务启动成功。所以要求 redis.conf 里的daemonize yes必须开启。如果你把 daemonize 改成 no,这里就要用Type=simple,不然 systemd 会认为服务一直在启动中。

配置文件写好后依次执行:

systemctl daemon-reload systemctl enable redis systemctl start redis systemctl status redis

status输出中出现Active: active (running)说明服务正常。之后重启机器的 Redis 也会自动拉起。注意ExecStop指定了redis-cli shutdown,这样 systemd 停服务时会走 Redis 的优雅关闭流程,避免 kill 带来的数据丢失。

如果遇到目录权限问题,比如日志写不进去,多半是 User/Group 设置为 redis 后,/usr/local/redis/logs还是 root 所有,需要用chown -R redis:redis /usr/local/redis修一下。这一步经常有人漏掉,最后发现服务起来又挂,日志目录根本没有写权限。

5. 安装过程常见报错与排查技巧

5.1 编译阶段的报错

Redis 编译阶段的报错大多集中在工具链和环境兼容上。整理几个高频场景:

报错信息可能原因解决办法
gcc: command not found系统没装 GCC 编译器安装 build-essential 或 gcc
make: command not found缺少 make 工具安装 make
jemalloc.h: No such file or directory编译器版本和 jemalloc 不兼容改用make MALLOC=libc
You need tcl 8.5 or newermake test 缺少 Tcl 测试环境apt install tcl/yum install tcl
struct redisServer has no member named backdrop之类编译器版本太老升级 GCC / 降低 Redis 版本

第一个报错最好解决:Debian 系执行apt install -y build-essential,RedHat 系执行yum install -y gcc make。但要注意即使有 gcc,老版本 GCC 4.8 编译 Redis 7.x 也会有一堆玄学错误,因为 Redis 源码用到了比较新的 C 特性。如果服务器没法升级 GCC,最省事的方案是降级到 Redis 6.2.x,或者用 Docker 镜像把编译环境隔离掉。

jemalloc 的问题前面顺带提过。报错背后的逻辑是 Redis 在 configure 阶段会尝试寻找 jemalloc 头文件,找不到就直接中断。用make MALLOC=libc可以绕过 jemalloc 切换到 glibc 的 malloc,但如果你追求更优的内存碎片控制,可以先单独安装 jemalloc-devel 再来编 Redis。生产环境建议源码编译前把依赖补齐:apt install -y libjemalloc-dev/yum install -y jemalloc-devel。

make test报缺少 Tcl 的错也比较常见。make test依赖 tclsh 执行测试脚本,apt install tcl或yum install tcl装完再跑。很多运维刚上手时以为编译成功就够了,不跑测试,结果上线后才发现某些数据结构功能异常。测试阶段多花三分钟绝对比故障时排查三小时划算。

还有一个容易踩的坑是磁盘空间不够。make过程中产生的中间文件和make test生成的临时数据都不小,/tmp分区如果只有几百 MB,编译到一半报No space left on device。别慌,清理一下 /tmp,或者给临时目录换个大点的路径。

5.2 启动与连接阶段的报错

比编译报错更让人头疼的是服务明明起来了,客户端却连不上。最常见的现象:

Could not connect to Redis at 127.0.0.1:6379: Connection refused

看到Connection refused,先确认进程是否还活着:

ps -ef | grep redis-server netstat -lntp | grep 6379

如果没有进程,去日志里看启动日志,通常 Redis 会把错误原因直接打在 stdout 或 logfile 里。如果进程存在但还是连接被拒绝,重点查两件事。第一,bind配置的监听地址是不是只绑定了某个内网 IP,而你却用 127.0.0.1 去连;第二,protected-mode yes且没有设置密码时,非本机回环连接会被主动断开,日志会提示-DENIED Redis is running in protected mode。

这时候千万不要急着把 protected-mode 改成 no,真正该做的第一件事是设置一个强密码。安全实践里我见过太多机器,因为嫌本地环境麻烦就把保护模式关掉,结果 6379 端口直接被扫到,被写入定时任务挖矿。Redis 本身权限大,能被用来写文件、加载模块,一旦被攻破基本等于机器沦陷。

另一个高频问题是端口被占用。如果启动日志出现:

Could not create server TCP listening socket *:6379: bind: Address already in use

说明已经有 Redis 或别的进程占用了 6379。要么停掉旧进程释放端口,要么改新实例的port。我在多实例部署时常用 6380、6381 作为额外实例端口,配合不同的配置文件,这样一台机器上就能部署多个相互隔离的 Redis 服务。

防火墙策略也可能把连接挡在外面。云服务器需要检查安全组是否放行 6379,本地 CentOS/Ubuntu 还要看 firewalld/ufw 状态。这个“服务起来但别人连不上”的案例里,最大的排查障碍是 ping 自己正常、telnet 外部 IP 不通,然后开始怀疑配置文件,其实最后把防火墙加一条放行规则就好了。

连接常见问题速查表:

现象原因排查命令
Connection refused服务没启动 / 监听地址不对ss -lntp、ps -ef
NOAUTH Authentication required设置了密码但没授权redis-cli -a 密码
DENIED protected mode无密码且 bind 非本机设置 requirepass
timeout网络或系统参数限制ping、telnet 6379
Address already in use端口占用ss -lntp grep 6379

5.3 内核参数相关的警告

Redis 启动时经常会出现下面这样的警告日志,很多人看到后不知所措,其实这些都指向内核参数:

# WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel.

第一个警告说 TCP backlog 队列长度不达标。Redis 默认的 backlog 是 511,但 Linux 默认somaxconn只有 128,高并发场景下连接排队能力受限。临时解决办法:

sysctl -w net.core.somaxconn=1024

永久生效写入/etc/sysctl.conf。

第二个警告关于overcommit_memory,它影响 Redis 后台持久化时能否正常申请内存。Redis 在做 RDB fork 子进程时,如果系统内存不够且 overcommit 策略过于保守,fork 会失败,后台保存直接挂掉。建议设置为 1:

sysctl -w vm.overcommit_memory=1

第三个警告关于透明大页 THP。Redis 官方在 FAQ 里明确建议关闭它,因为 THP 和 fork 的内存管理机制放在一起容易增加延迟。通过启动脚本或 sysctl 配置关闭:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

这几个警告不影响 Redis 启动,但它都是在告诉你这台机器的底层参数没调到位。如果不处理,短时间看不出问题,一旦写入压力上来,就可能出现 fork 失败、延迟抖动或者持久化异常。我的习惯是装完 Redis 顺手把这三个内核参数全部调整好,不给自己留后患。

6. 安装心得与一些建议

装 Redis 这件事,看起来只有下载、解压、启动三个动作,但实际牵扯到版本选型、平台差异、编译工具链、配置调优、系统服务注册,每一环都能让新手卡很久。我自己踩过几次坑之后,总结出来的习惯就是:先明确部署场景再决定安装方式,生产环境始终坚持源码编译 + 独立目录 + systemd 托管,绝不为了图省事直接 apt install 然后放任默认配置。

还有一个小技巧分享给各位:安装完成后,建议立刻做一次“冒烟测试”,不需要复杂的压测工具,直接用 redis-benchmark 跑一轮基础读写:

redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 -t set,get -q

这一条命令能快速暴露网络、文件描述符、内存分配、内核调度等问题。看到吞吐量正常、没有大量 timeout,这台 Redis 的安装才算真正落地。之后再写业务代码,心里才有底。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询