前言
Redis作为高性能的键值对内存数据库,在现代Web架构中扮演着重要角色。本文将提供从源码编译到包管理器安装的完整方案,包含主从复制、持久化配置、性能优化等生产级设置,助你快速搭建高可用的Redis服务。
一、安装前准备
- 系统要求检查
bash
检查系统版本和架构
cat /etc/os-release
uname -m # x86_64或aarch64
检查内存大小(建议至少2GB)
free -h
2. 环境准备
bash
安装编译依赖
sudo apt update # Ubuntu/Debian
sudo apt install build-essential tcl -y
sudo yum install gcc make tcl -y # CentOS/RHEL
二、安装方法对比
方案对比表
方法 优点 缺点 适用场景
源码编译 版本灵活,最新特性 步骤复杂,需手动配置 开发测试、特定版本需求
包管理器 简单快捷,自动管理 版本可能较旧 生产环境、快速部署
Docker 环境隔离,一键部署 性能略有损耗 容器化环境
三、方法一:源码编译安装(最新稳定版)
- 下载与解压
bash
创建安装目录
mkdir -p /opt/redis
cd /opt/redis
下载Redis 7.x稳定版
wget https://download.redis.io/redis-stable.tar.gz
tar -xzf redis-stable.tar.gz
cd redis-stable
目录结构预览:
text
redis-stable/
├── src/ # 源代码
├── tests/ # 测试文件
├── redis.conf # 配置文件模板
└── README.md
2. 编译与安装
bash
编译Redis(需要gcc编译器)
make -j$(nproc) # 使用所有CPU核心加速编译
测试编译结果(可选但推荐)
make test
安装到系统目录
sudo make install
编译过程示意图:
text
CC Makefile.dep
CC adlist.o
CC quicklist.o
CC ae.o
…(约30个文件)
LINK redis-server
INSTALL redis-sentinel
INSTALL redis-cli
3. 验证安装
bash
查看版本
redis-server --version
输出:Redis server v=7.0.x sha=xxxxxx bits=64
启动Redis服务端
redis-server
成功启动标志:
text
…
- Ready to accept connections
- DB loaded from disk: 0.001 seconds
四、方法二:包管理器安装(推荐生产环境)
- Ubuntu/Debian 安装
bash
添加官方PPA(获取最新版本)
sudo add-apt-repository ppa:redislabs/redis -y
sudo apt update
安装Redis
sudo apt install redis-server -y
验证安装
redis-cli ping
返回:PONG
- CentOS/RHEL 安装
bash
启用EPEL仓库
sudo yum install epel-release -y
安装Redis
sudo yum install redis -y
或使用Remi仓库(更新版本)
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
sudo yum --enablerepo=remi install redis -y
3. 服务管理
bash
启动服务
sudo systemctl start redis # Ubuntu 16.04+/CentOS 7+
或
sudo service redis start # 旧版本
设置开机自启
sudo systemctl enable redis
查看服务状态
sudo systemctl status redis
服务状态正常显示:
text
● redis.service - Redis In-Memory Data Store
Loaded: loaded (/lib/systemd/system/redis.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-10-01 10:00:00 CST; 1min ago
五、基础配置与优化
- 配置文件位置
bash
Ubuntu/Debian
/etc/redis/redis.conf
CentOS/RHEL
/etc/redis.conf
源码安装默认
/opt/redis/redis-stable/redis.conf
2. 关键配置项详解
bash
备份原配置
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.backup
编辑配置文件
sudo nano /etc/redis/redis.conf
必须修改的配置:
ini
绑定地址(生产环境建议具体IP)
bind 127.0.0.1 # 仅本地访问
或 bind 0.0.0.0 # 允许所有IP(需配合防火墙)
保护模式(外网访问需关闭)
protected-mode no
端口设置
port 6379
守护进程模式(后台运行)
daemonize yes
日志文件
logfile /var/log/redis/redis-server.log
数据持久化目录
dir /var/lib/redis
最大内存设置
maxmemory 2gb
maxmemory-policy allkeys-lru
认证密码(生产环境必须)
requirepass YourStrongPassword123!
3. 数据目录设置
bash
创建数据目录
sudo mkdir -p /var/lib/redis
sudo chown redis:redis /var/lib/redis # Ubuntu
或 sudo chown redis:redis /var/lib/redis # CentOS
创建日志目录
sudo mkdir -p /var/log/redis
sudo chown redis:redis /var/log/redis
六、Redis 持久化配置
- RDB 快照配置
ini
在redis.conf中添加
save 900 1 # 900秒内至少1个key变化
save 300 10 # 300秒内至少10个key变化
save 60 10000 # 60秒内至少10000个key变化
RDB文件名称
dbfilename dump.rdb
压缩RDB文件
rdbcompression yes
2. AOF 追加日志配置
ini
启用AOF
appendonly yes
AOF文件名
appendfilename “appendonly.aof”
同步策略(平衡性能与安全)
appendfsync everysec
自动重写AOF文件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
3. 混合持久化(Redis 4.0+)
ini
RDB+AOF混合模式
aof-use-rdb-preamble yes
七、安全加固
- 防火墙配置
bash
Ubuntu UFW
sudo ufw allow from 192.168.1.0/24 to any port 6379
sudo ufw reload
CentOS Firewalld
sudo firewall-cmd --permanent --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port protocol=“tcp” port=“6379” accept’
sudo firewall-cmd --reload
2. 重命名危险命令
ini
禁用或重命名危险命令
rename-command FLUSHDB “”
rename-command FLUSHALL “”
rename-command CONFIG “CONFIG-SECURE”
rename-command SHUTDOWN “SHUTDOWN-SECURE”
3. TLS加密(Redis 6.0+)
bash
生成TLS证书
openssl genrsa -out redis.key 2048
openssl req -new -key redis.key -out redis.csr
openssl x509 -req -days 365 -in redis.csr -signkey redis.key -out redis.crt
配置文件启用TLS
tls-port 6379
tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key
八、性能测试与监控
- 基准测试
bash
使用redis-benchmark测试
redis-benchmark -h 127.0.0.1 -p 6379 -a YourPassword -t set,get -n 100000 -c 100
测试结果示例:
====== SET ======
100000 requests completed in 1.00 seconds
100 parallel clients
3 bytes payload
keep alive: 1
99.99% <= 1 milliseconds
99999.99 requests per second
2. 监控指标查看
bash
连接Redis
redis-cli -a YourPassword
查看信息
INFO
INFO memory # 内存信息
INFO stats # 统计信息
INFO replication # 复制信息
INFO persistence # 持久化信息
退出
exit
3. 安装RedisInsight(可视化工具)
bash
下载并安装
wget https://download.redisinsight.redis.com/latest/redisinsight-linux64.tar.gz
tar -xzf redisinsight-linux64.tar.gz
cd redisinsight-linux64
./redisinsight-linux64
访问 http://localhost:5540
九、主从复制配置
- 主服务器配置
ini
master.conf
bind 192.168.1.100
port 6379
requirepass MasterPassword123
masterauth SlavePassword456
2. 从服务器配置
ini
slave.conf
bind 192.168.1.101
port 6379
requirepass SlavePassword456
指定主服务器
slaveof 192.168.1.100 6379
masterauth MasterPassword123
只读模式
slave-read-only yes
3. 启动与验证
bash
分别启动主从
redis-server /path/to/master.conf
redis-server /path/to/slave.conf
检查复制状态
redis-cli -h 192.168.1.100 -a MasterPassword123 INFO replication
十、故障排除
- 常见问题解决
bash
问题1:启动失败,端口被占用
sudo netstat -tulnp | grep :6379
sudo kill -9
或修改端口
问题2:内存不足
调整配置:maxmemory 1gb
问题3:连接超时
检查防火墙和bind设置
问题4:AOF文件损坏
修复命令:
redis-check-aof --fix appendonly.aof
2. 日志分析
bash
查看错误日志
sudo tail -f /var/log/redis/redis-server.log
常见日志信息:
* DB loaded from disk: 0.001 seconds # 启动成功
* Background saving started by pid 1234 # RDB保存开始
* Client closed connection # 客户端断开
* Creating Server TCP listening socket *:6379: bind: Address already in use # 端口冲突
- 性能诊断
bash
慢日志查询
redis-cli -a YourPassword
CONFIG SET slowlog-log-slower-than 10000 # 记录超过10ms的命令
SLOWLOG GET 10 # 查看最近10条慢查询
十一、备份与恢复
- 手动备份
bash
RDB备份
cp /var/lib/redis/dump.rdb /backup/dump-$(date +%Y%m%d).rdb
AOF备份
cp /var/lib/redis/appendonly.aof /backup/aof-$(date +%Y%m%d).aof
2. 自动备份脚本
bash
#!/bin/bash
redis_backup.sh
BACKUP_DIR=“/backup/redis”
DATE=$(date +%Y%m%d_%H%M%S)
执行BGSAVE
redis-cli -a YourPassword BGSAVE
等待保存完成
sleep 10
复制RDB文件
cp /var/lib/redis/dump.rdbKaTeX parse error: Expected group after '_' at position 16: BACKUP_DIR/dump_̲DATE.rdb
保留最近7天备份
find $BACKUP_DIR -name “dump_*.rdb” -mtime +7 -delete
3. 恢复数据
bash
停止Redis
sudo systemctl stop redis
恢复RDB文件
cp /backup/dump-20231001.rdb /var/lib/redis/dump.rdb
修改文件权限
chown redis:redis /var/lib/redis/dump.rdb
启动Redis
sudo systemctl start redis
安装验证清单
✅ 基础检查:
Redis服务正常运行:sudo systemctl status redis
可以连接:redis-cli ping 返回 PONG
版本正确:redis-server --version
✅ 安全配置:
设置了认证密码
绑定了特定IP或启用了保护模式
防火墙已配置
危险命令已重命名
✅ 持久化配置:
RDB或AOF已启用
数据目录权限正确
备份脚本已测试
✅ 性能优化:
内存限制已设置
淘汰策略合理
日志路径正确
总结建议
生产环境建议:使用包管理器安装+自定义配置
开发环境:使用Docker快速部署
内存规划:预留20-30%内存给系统
监控必备:设置Redis监控告警
定期维护:清理碎片,检查备份