CentOS 7 编译 Redis 6.x 完整教程(解决 GCC 版本不支持 C11)
🚀 CentOS 7 编译 Redis 6.x 完整教程(解决 GCC 版本不支持 C11)
Redis 6.x 引入了 stdatomic.h
等 C11 特性,而 CentOS 7 默认 GCC 版本为 4.8.5,不支持 C11 标准,所以直接编译会失败。
✅ 可选方案概览
方案 | 是否支持 Redis 6.x | 是否推荐 | 说明 |
---|---|---|---|
升级 GCC(使用 Devtoolset) | ✅ 支持 | ⭐推荐 | 不影响系统默认 GCC,兼容性更好 |
使用 Redis 5.0.x | ✅ 支持 | ⭐推荐 | 避免修改 GCC,适合仅需基础功能的场景 |
继续用 GCC 4.8 编译 Redis 6.x | ❌ 不支持 | ❌不行 | 缺失 stdatomic.h ,无法成功编译 |
✅ 推荐方案一:升级 GCC(使用 Devtoolset 工具链)
🛠️ 步骤一:安装 Devtoolset 和 GCC 9
# 安装软件源(scl 源)
sudo yum install -y centos-release-scl# 安装 GCC 9 和 G++ 9
sudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++
🛠️ 步骤二:启用新版 GCC(当前会话)
# 切换到新版 GCC 环境(只对当前 shell 有效)
scl enable devtoolset-9 bash# 确认是否为新版
gcc --version
预期输出:
gcc (GCC) 9.x.x
📌 提示:每次新开一个 shell 终端,都要重新运行
scl enable devtoolset-9 bash
。
🧱 步骤三:编译 Redis 6.x
示例:编译 Redis 6.2.10
# 下载 Redis 源码(如已有可跳过)
cd /usr/local/src
wget http://download.redis.io/releases/redis-6.2.10.tar.gz
tar -xvzf redis-6.2.10.tar.gz
cd redis-6.2.10# 清理旧编译缓存
make distclean# 编译(使用全部核心)
make -j$(nproc)
编译成功后可以启动服务:
src/redis-server redis.conf
🧪 测试 Redis 是否可用
src/redis-cli ping
输出:
PONG
✅ 推荐方案二:使用 Redis 5.0.x(兼容 GCC 4.8.5)
如果你不想升级 GCC,可以选择兼容老编译器的 Redis 5.0:
cd /usr/local/src
wget http://download.redis.io/releases/redis-5.0.14.tar.gz
tar -xvzf redis-5.0.14.tar.gz
cd redis-5.0.14make -j$(nproc)# 启动 Redis 服务
src/redis-server redis.conf
🎯 自动化脚本(可选)
自动切换到 GCC 9 并编译 Redis 的脚本示例:
cat <<EOF > install_redis6_with_gcc9.sh
#!/bin/bash
set -eecho "🔧 安装 Devtoolset-9..."
yum install -y centos-release-scl
yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++echo "🚀 启用 GCC 9 环境..."
source /opt/rh/devtoolset-9/enableecho "📦 下载并编译 Redis 6.2.10..."
cd /usr/local/src
wget http://download.redis.io/releases/redis-6.2.10.tar.gz
tar -xvzf redis-6.2.10.tar.gz
cd redis-6.2.10
make -j\$(nproc)echo "✅ 编译完成,启动 Redis..."
src/redis-server redis.conf
EOFchmod +x install_redis6_with_gcc9.sh
然后运行脚本:
bash install_redis6_with_gcc9.sh
📌 总结建议
方案 | 适用场景 | 是否推荐 |
---|---|---|
✅ 升级 GCC(使用 Devtoolset) | 使用 Redis 6.x 及以上版本 | ⭐推荐 |
✅ 使用 Redis 5.0.x | 环境稳定、仅使用基本功能即可 | ⭐推荐 |
❌ 尝试用 GCC 4.8 编译 Redis 6.x | 编译会失败,不支持 C11 | ❌不行 |