*Redis 源码编译安装指南

从源码编译 Redis 可以获得最大的灵活性,适用于需要自定义编译选项、使用最新开发版本或在特殊平台上运行的场景。

*前置条件

Redis 的编译依赖非常简单:

  • C 编译器(gcc 或 clang)
  • libc 库
  • make 工具
  • OpenSSL 开发库(可选,用于 TLS 支持)

*安装编译依赖

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install build-essential tcl pkg-config libssl-dev

Rocky/AlmaLinux:

sudo yum groupinstall "Development Tools"
sudo yum install tcl openssl-devel

macOS:

xcode-select --install
brew install openssl

*下载源码

*下载稳定版

wget https://download.redis.io/redis-stable.tar.gz

*下载指定版本

wget https://download.redis.io/redis-8.0.0.tar.gz

*验证完整性

可在 redis-hashes GitHub 仓库 中找到各版本的哈希值,验证下载文件的完整性。

*编译 Redis

*基本编译

tar -xzvf redis-stable.tar.gz
cd redis-stable
make

编译完成后,src 目录下会生成以下二进制文件:

文件 说明
redis-server Redis 服务器
redis-cli 命令行客户端
redis-benchmark 性能测试工具
redis-check-aof AOF 文件修复工具
redis-check-rdb RDB 文件检查工具
redis-sentinel Sentinel 高可用组件
redis-benchmark 基准测试工具

*启用 TLS 支持

make BUILD_TLS=yes

*使用指定内存分配器

# 使用 jemalloc(推荐)
make MALLOC=jemalloc

# 使用 libc 默认分配器
make MALLOC=libc

*并行编译

使用多核加速编译:

make -j$(nproc)

*安装二进制文件

sudo make install

默认安装到 /usr/local/bin/。如需指定安装路径:

sudo make install PREFIX=/usr/local/redis

*运行测试

编译完成后,建议运行测试套件:

make test

注意:完整测试可能需要较长时间(10-30 分钟)。

*启动 Redis

*前台运行

redis-server

看到启动日志表示运行成功。按 Ctrl-C 停止。

*使用配置文件

redis-server /path/to/redis.conf

源码包中包含默认配置文件:

redis-server redis.conf

*生产环境安装配置

*创建必要的目录

sudo mkdir /etc/redis
sudo mkdir /var/redis
sudo mkdir /var/log/redis
sudo mkdir /var/run/redis

*复制配置文件

sudo cp redis.conf /etc/redis/6379.conf

*创建 init 脚本

Redis 源码包含 init 脚本模板:

sudo cp utils/redis_init_script /etc/init.d/redis_6379
sudo chmod 755 /etc/init.d/redis_6379

编辑脚本,设置正确的 REDISPORT:

sudo vi /etc/init.d/redis_6379

*配置 systemd 服务(推荐)

创建 /etc/systemd/system/redis.service:

[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 shutdown
Restart=always

[Install]
WantedBy=multi-user.target

启用并启动:

sudo systemctl daemon-reload
sudo systemctl enable redis
sudo systemctl start redis

*创建 redis 用户

sudo useradd -r -s /bin/false redis
sudo chown -R redis:redis /var/redis
sudo chown -R redis:redis /var/log/redis
sudo chown -R redis:redis /var/run/redis

*关键配置修改

编辑 /etc/redis/redis.conf:

# 后台运行
daemonize yes

# PID 文件
pidfile /var/run/redis/redis-server.pid

# 端口
port 6379

# 日志级别
loglevel notice

# 日志文件
logfile /var/log/redis/redis-server.log

# 数据目录
dir /var/redis

# 绑定地址(生产环境建议只绑定内网)
bind 127.0.0.1

# 设置密码(可选但强烈建议)
requirepass your_strong_password

# 启用持久化
save 900 1
save 300 10
save 60 10000

# 启用 AOF(可选)
appendonly yes
appendfilename "appendonly.aof"

*升级源码安装的 Redis

  1. 备份数据:

    redis-cli SAVE
    cp /var/redis/dump.rdb /backup/dump.rdb.$(date +%Y%m%d)
    
  2. 停止 Redis:

    redis-cli shutdown
    
  3. 下载并编译新版本:

    wget https://download.redis.io/redis-newversion.tar.gz
    tar -xzvf redis-newversion.tar.gz
    cd redis-newversion
    make
    sudo make install
    
  4. 启动新版本:

    redis-server /etc/redis/redis.conf
    

*常见问题

*编译错误:"jemalloc/jemalloc.h: No such file"

make distclean
make MALLOC=libc

*编译错误:"undefined reference to `__atomic_store_8'"

在 ARM 平台上可能需要链接 atomic 库:

make LDFLAGS="-latomic"

*测试失败

某些测试可能需要特定环境。如果测试失败但基本功能正常,通常可以安全使用。

# 运行单个测试
./runtest --single unit/type/string