Linux系统下Redis安装配置与优化指南
1. Redis简介与安装准备
Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储数据库,由Salvatore Sanfilippo用C语言开发。它支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,常用于缓存、消息队列、会话存储等场景。
在Linux系统上安装Redis前,我们需要做好以下准备工作:
- 确认系统版本:建议使用较新的Linux发行版(如Ubuntu 18.04+、CentOS 7+)
- 准备root或具有sudo权限的用户账号
- 确保系统可以访问互联网以下载安装包
提示:生产环境建议使用专用用户运行Redis服务,而非直接使用root账户
2. 安装依赖环境
2.1 安装GCC编译器
Redis是用C语言编写的,安装前需要确保系统已安装GCC编译器:
# 检查是否已安装gcc gcc --version # 如果未安装,执行以下命令安装 sudo apt update # Ubuntu/Debian sudo apt install -y gcc make # 或者对于CentOS/RHEL sudo yum install -y gcc make2.2 安装其他依赖项
# Ubuntu/Debian sudo apt install -y libc6-dev tcl # CentOS/RHEL sudo yum install -y glibc-devel tcl3. 下载与安装Redis
3.1 获取Redis源码包
建议从官网下载最新稳定版:
# 创建安装目录 sudo mkdir -p /usr/local/redis cd /usr/local/redis # 下载Redis(以6.2.6为例) sudo wget https://download.redis.io/releases/redis-6.2.6.tar.gz sudo tar xzf redis-6.2.6.tar.gz cd redis-6.2.63.2 编译安装Redis
# 编译 sudo make # 可选:运行测试(耗时较长) sudo make test # 安装 sudo make install注意:如果make test报错,可能是系统时间设置有问题,可以尝试同步时间后重试:
sudo ntpdate pool.ntp.org
4. 配置Redis服务
4.1 基本配置
编辑Redis配置文件:
sudo cp redis.conf redis.conf.bak # 备份原始配置 sudo nano redis.conf建议修改以下关键配置:
bind 0.0.0.0 # 允许远程连接(生产环境应限制IP) protected-mode no # 关闭保护模式 daemonize yes # 以守护进程运行 requirepass yourpassword # 设置访问密码 maxmemory 2gb # 根据服务器内存调整 maxmemory-policy allkeys-lru # 内存满时的淘汰策略4.2 创建systemd服务
创建服务文件:
sudo nano /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 /usr/local/redis/redis-6.2.6/redis.conf ExecStop=/usr/local/bin/redis-cli shutdown Restart=always [Install] WantedBy=multi-user.target创建专用用户并设置权限:
sudo adduser --system --group --no-create-home redis sudo chown -R redis:redis /usr/local/redis sudo chmod 770 /usr/local/redis5. 启动与管理Redis
5.1 启动Redis服务
sudo systemctl daemon-reload sudo systemctl start redis sudo systemctl enable redis5.2 验证服务状态
sudo systemctl status redis redis-cli ping # 应返回PONG5.3 常用管理命令
# 连接Redis redis-cli -a yourpassword # 查看信息 INFO # 查看内存使用 INFO memory # 查看客户端连接 CLIENT LIST # 安全关闭 SHUTDOWN SAVE6. 安全配置建议
防火墙设置:
sudo ufw allow 6379/tcp # Ubuntu sudo firewall-cmd --permanent --add-port=6379/tcp # CentOS禁用危险命令: 在redis.conf中添加:
rename-command FLUSHALL "" rename-command CONFIG "" rename-command SHUTDOWN ""定期备份:
# 创建备份目录 sudo mkdir /var/redis-backups sudo chown redis:redis /var/redis-backups # 手动备份 redis-cli -a yourpassword SAVE sudo cp /var/lib/redis/dump.rdb /var/redis-backups/dump-$(date +%F).rdb
7. 常见问题解决
7.1 编译错误
问题:make时报错"jemalloc/jemalloc.h: No such file or directory"
解决:
make MALLOC=libc7.2 连接问题
问题:无法远程连接Redis
检查:
- 确认redis.conf中
bind设置 - 检查防火墙设置
- 确认
protected-mode设置为no - 检查密码是否正确
7.3 内存问题
问题:Redis占用内存过高
解决:
- 检查并优化数据结构使用
- 设置适当的maxmemory和淘汰策略
- 考虑使用Redis集群分散负载
8. 性能优化建议
持久化配置:
- 根据需求选择RDB或AOF
- 生产环境建议同时启用两者
网络优化:
# 在redis.conf中调整 tcp-keepalive 60 tcp-backlog 511内核参数调整:
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf sysctl -p监控设置:
- 使用INFO命令定期收集指标
- 考虑使用RedisInsight等可视化工具
9. 高级配置
9.1 主从复制
在从节点redis.conf中添加:
replicaof <masterip> <masterport> masterauth <master-password>9.2 哨兵模式
创建sentinel.conf:
port 26379 sentinel monitor mymaster 127.0.0.1 6379 2 sentinel auth-pass mymaster yourpassword sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 10000启动哨兵:
redis-sentinel /path/to/sentinel.conf9.3 Redis集群
- 创建多个节点
- 在每个节点的redis.conf中启用集群:
cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 - 使用redis-cli创建集群:
redis-cli --cluster create \ 127.0.0.1:7000 127.0.0.1:7001 \ 127.0.0.1:7002 127.0.0.1:7003 \ 127.0.0.1:7004 127.0.0.1:7005 \ --cluster-replicas 1 -a yourpassword
10. 维护与监控
10.1 日常维护命令
# 查看慢查询 redis-cli --latency redis-cli SLOWLOG GET 10 # 碎片整理 redis-cli MEMORY PURGE # 查看大key redis-cli --bigkeys10.2 日志分析
建议在redis.conf中配置:
logfile "/var/log/redis/redis.log" loglevel notice定期检查日志:
sudo tail -f /var/log/redis/redis.log10.3 备份策略
RDB备份:
# 手动触发 redis-cli SAVE # 或 redis-cli BGSAVEAOF备份: 确保配置:
appendonly yes appendfsync everysec自动化备份脚本:
#!/bin/bash BACKUP_DIR="/var/redis-backups" DATE=$(date +%F) redis-cli -a yourpassword SAVE cp /var/lib/redis/dump.rdb "$BACKUP_DIR/dump-$DATE.rdb" find "$BACKUP_DIR" -name "*.rdb" -mtime +7 -delete
11. 升级Redis版本
- 停止当前Redis服务
- 备份数据和配置文件
- 下载并编译新版本
- 测试新版本功能
- 逐步在生产环境部署
# 示例升级步骤 sudo systemctl stop redis sudo cp /usr/local/redis/redis.conf /tmp/redis.conf.bak cd /usr/local/redis sudo wget https://download.redis.io/releases/redis-6.2.7.tar.gz sudo tar xzf redis-6.2.7.tar.gz cd redis-6.2.7 sudo make sudo make install sudo cp /tmp/redis.conf.bak ./redis.conf sudo systemctl start redis12. 卸载Redis
如需完全卸载Redis:
sudo systemctl stop redis sudo systemctl disable redis sudo rm /etc/systemd/system/redis.service sudo systemctl daemon-reload sudo deluser redis sudo rm -rf /usr/local/redis sudo rm /usr/local/bin/redis-*