CentOS 下源码编译安装完整版 Redis 8.0 指南
前言
Redis 是目前最流行的内存数据结构服务器,被广泛应用于缓存、会话存储、消息队列、实时分析等场景。本文基于 Redis 官方 README 中的构建文档,详细介绍在 CentOS(及 RHEL 系发行版)下如何从源码编译安装包含所有数据结构的完整版 Redis,并解释为什么现在编译 Redis 需要 Rust 工具链。
注意:由于 CentOS Linux 已停止维护,推荐使用 Rocky Linux 或 AlmaLinux 作为替代,它们与 RHEL 完全兼容。本文中的步骤在这两个发行版上验证通过。
一、为什么需要编译安装完整版 Redis
Redis 提供了丰富的数据结构,但默认编译可能只包含核心功能。通过设置 BUILD_WITH_MODULES=yes,你可以启用以下高级数据结构:
- JSON:支持 JSON 文档的存储、索引和查询
- Bloom Filter / Cuckoo Filter:概率数据结构,用于去重、过滤场景
- Time Series:时序数据存储
- Top-K:数据流中 Top-K 频繁项查询
- Count-Min Sketch:频率估计
- t-digest:百分位数估计
- Redis Query Engine:向量化搜索、全文搜索、地理空间查询
这些功能在官方预编译版本或 yum/apt 安装的版本中通常不包含,需要手动编译。
二、环境准备
2.1 系统要求
- Rocky Linux 8.10+ 或 AlmaLinux 8.10+ 或兼容的 RHEL 系系统
- 建议 2GB+ 内存
- 至少 10GB 可用磁盘空间
2.2 安装基础依赖
bash
# 清理缓存并配置仓库
sudo dnf clean all
sudo tee /etc/yum.repos.d/goreleaser.repo > /dev/null <<EOF
[goreleaser]
name=GoReleaser
baseurl=https://repo.goreleaser.com/yum/
enabled=1
gpgcheck=0
EOF
# 更新系统并安装开发工具
sudo dnf update -y
sudo dnf groupinstall "Development Tools" -y
sudo dnf config-manager --set-enabled powertools
sudo dnf install -y epel-release
2.3 安装编译依赖
bash
# 安装 Redis 编译所需的依赖包
sudo dnf install -y --nobest --skip-broken \
pkg-config \
wget \
gcc-toolset-13-gcc \
gcc-toolset-13-gcc-c++ \
git \
make \
openssl \
openssl-devel \
python3 \
python3-pip \
python3-devel \
unzip \
rsync \
clang \
curl \
libtool \
automake \
autoconf \
jq \
systemd-devel
2.4 配置 Python 虚拟环境
bash
python3 -m venv /opt/venv
2.5 启用 GCC 13 工具链
Redis 8.0 需要较新版本的 GCC,CentOS/RHEL 默认的 GCC 版本过低:
bash
sudo cp /opt/rh/gcc-toolset-13/enable /etc/profile.d/gcc-toolset-13.sh
echo "source /etc/profile.d/gcc-toolset-13.sh" | sudo tee -a /etc/bashrc
2.6 安装 CMake
Redis 8.0 官方要求 CMake 3.25.1,不支持更高版本:
bash
CMAKE_VERSION=3.25.1
ARCH=$(uname -m)
if [ "$ARCH" = "x86_64" ]; then
CMAKE_FILE=cmake-${CMAKE_VERSION}-linux-x86_64.sh
else
CMAKE_FILE=cmake-${CMAKE_VERSION}-linux-aarch64.sh
fi
wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/${CMAKE_FILE}
chmod +x ${CMAKE_FILE}
sudo ./${CMAKE_FILE} --skip-license --prefix=/usr/local --exclude-subdir
rm ${CMAKE_FILE}
cmake --version
三、下载并编译 Redis
3.1 下载源码
bash
# 创建源码目录
sudo mkdir -p /usr/src
cd /usr/src
# 下载 Redis 8.0 源码(以 8.0.0 为例,可替换为其他版本)
sudo wget -O redis-8.0.0.tar.gz https://github.com/redis/redis/archive/refs/tags/8.0.0.tar.gz
# 解压
sudo tar xvf redis-8.0.0.tar.gz
sudo rm redis-8.0.0.tar.gz
3.2 编译安装
这是关键步骤!设置以下环境变量来启用完整功能:
bash
# 激活 GCC 工具链
source /etc/profile.d/gcc-toolset-13.sh
# 进入源码目录
cd /usr/src/redis-8.0.0
# 设置编译选项
# BUILD_TLS=yes - 启用 TLS 支持
# BUILD_WITH_MODULES=yes - 编译所有模块(JSON、Bloom Filter 等)
# INSTALL_RUST_TOOLCHAIN=yes - 自动安装 Rust 工具链(编译模块必需)
# DISABLE_WERRORS=yes - 禁用警告转错误,避免编译被无关警告中断
export BUILD_TLS=yes BUILD_WITH_MODULES=yes INSTALL_RUST_TOOLCHAIN=yes DISABLE_WERRORS=yes
# 编译(使用所有 CPU 核心加速)
make -j "$(nproc)" all
编译过程可能需要 10-30 分钟,取决于机器配置。
3.3 安装
bash
sudo make install
这会将 Redis 可执行文件安装到 /usr/local/bin/。
四、启动 Redis
4.1 快速启动
bash
cd /usr/src/redis-8.0.0
./src/redis-server redis-full.conf
4.2 后台运行
bash
./src/redis-server redis-full.conf --daemonize yes
4.3 验证安装
bash
# 连接 Redis
redis-cli ping
# 应该返回:PONG
# 查看版本
redis-cli INFO server | grep redis_version
4.4 验证模块加载
bash
# 查看已加载的模块
redis-cli INFO modules
# 测试 JSON 功能
redis-cli JSON.SET mydoc '$' '{"name":"Redis","version":8.0,"features":["JSON","Search","Vectors"]}'
redis-cli JSON.GET mydoc
五、为什么编译完整版 Redis 需要 Rust 工具链
这是很多开发者困惑的地方。让我解释清楚:
5.1 Redis 的模块化架构
Redis 从 7.0 开始引入了模块系统,允许用 C 语言之外的语言编写扩展模块。官方提供的高级数据结构模块(如 RedisJSON、RedisSearch)需要更高效的内存管理和并发处理能力。
5.2 为什么选择 Rust
Rust 相比 C 的优势:
| 特性 | C | Rust |
|---|---|---|
| 内存安全 | 手动管理,容易出错 | 编译时保证内存安全 |
| 并发安全 | 线程安全问题频发 | 所有权系统保证线程安全 |
| 性能 | 极高 | 与 C 相当 |
| 包管理 | 手动 | 现代化的 Cargo 生态 |
Redis 的模块(如 RedisJSON)需要解析复杂的 JSON 文档、执行向量相似性搜索等计算密集型任务。Rust 能在保证内存安全的同时提供与 C 相当的性能,是这些场景的理想选择。
5.3 INSTALL_RUST_TOOLCHAIN=yes 的作用
当你设置这个环境变量时,Redis 的 Makefile 会:
- 检查系统是否已安装 Rust 工具链(
rustc、cargo) - 如果没有,自动下载并安装 Rust 工具链到
deps/rust/目录 - 使用 Cargo 编译 Rust 依赖模块
- 将编译好的模块链接到 Redis 主程序
5.4 需要 Rust 模块的功能
以下 Redis 高级功能依赖 Rust:
- RedisJSON:JSON 文档存储和查询
- RedisSearch:全文搜索和聚合
- RedisJSON 与 RedisSearch 的组合(JSON 文档索引)
- 向量相似度搜索(Redis Stack 中的一部分)
如果你不需要这些功能,可以设置 BUILD_WITH_MODULES=no,这样就不需要 Rust 工具链:
bash
# 仅编译核心功能,不需要 Rust
make -j "$(nproc)" all
六、常见问题
Q1: 编译报错 "cc: command not found"
确保已启用 gcc-toolset-13:
bash
source /etc/profile.d/gcc-toolset-13.sh
Q2: CMake 版本不对
Redis 8.0 要求 CMake 3.25.1,更高版本会导致构建失败:
bash
cmake --version # 确认为 3.25.1
Q3: Rust 工具链下载失败
可以手动安装 Rust 后再编译:
bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
然后编译时使用:
bash
export INSTALL_RUST_TOOLCHAIN=no # 跳过自动安装
make -j "$(nproc)" all
Q4: 如何查看 Redis 支持哪些模块
bash
redis-cli INFO modules
七、总结
通过源码编译安装 Redis 8.0 完整版,虽然步骤较多,但能获得:
- ✅ 所有高级数据结构支持(JSON、Bloom Filter、Time Series 等)
- ✅ Redis Query Engine(向量搜索、全文搜索)
- ✅ TLS 加密连接支持
- ✅ 更好的性能和定制能力
Rust 工具链是 Redis 模块化战略的重要组成部分,确保了高级功能的内存安全和性能。如果你的生产环境确实不需要这些模块,编译核心版本也是完全可行的选择。
参考资料 :Redis 官方 GitHub README