Linux系统下Redis安装配置与优化指南

发布时间:2026/11/2 21:58:54
Linux系统下Redis安装配置与优化指南

1. Redis简介与安装准备

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储数据库,由Salvatore Sanfilippo用C语言开发。它支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,常用于缓存、消息队列、会话存储等场景。

在Linux系统上安装Redis前,我们需要做好以下准备工作:

  1. 确认系统版本:建议使用较新的Linux发行版(如Ubuntu 18.04+、CentOS 7+)
  2. 准备root或具有sudo权限的用户账号
  3. 确保系统可以访问互联网以下载安装包

提示:生产环境建议使用专用用户运行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 make

2.2 安装其他依赖项

# Ubuntu/Debian sudo apt install -y libc6-dev tcl # CentOS/RHEL sudo yum install -y glibc-devel tcl

3. 下载与安装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.6

3.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/redis

5. 启动与管理Redis

5.1 启动Redis服务

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

5.2 验证服务状态

sudo systemctl status redis redis-cli ping # 应返回PONG

5.3 常用管理命令

# 连接Redis redis-cli -a yourpassword # 查看信息 INFO # 查看内存使用 INFO memory # 查看客户端连接 CLIENT LIST # 安全关闭 SHUTDOWN SAVE

6. 安全配置建议

  1. 防火墙设置:

    sudo ufw allow 6379/tcp # Ubuntu sudo firewall-cmd --permanent --add-port=6379/tcp # CentOS
  2. 禁用危险命令: 在redis.conf中添加:

    rename-command FLUSHALL "" rename-command CONFIG "" rename-command SHUTDOWN ""
  3. 定期备份:

    # 创建备份目录 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=libc

7.2 连接问题

问题:无法远程连接Redis

检查:

  1. 确认redis.conf中bind设置
  2. 检查防火墙设置
  3. 确认protected-mode设置为no
  4. 检查密码是否正确

7.3 内存问题

问题:Redis占用内存过高

解决:

  1. 检查并优化数据结构使用
  2. 设置适当的maxmemory和淘汰策略
  3. 考虑使用Redis集群分散负载

8. 性能优化建议

  1. 持久化配置:

    • 根据需求选择RDB或AOF
    • 生产环境建议同时启用两者
  2. 网络优化:

    # 在redis.conf中调整 tcp-keepalive 60 tcp-backlog 511
  3. 内核参数调整:

    echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf sysctl -p
  4. 监控设置:

    • 使用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.conf

9.3 Redis集群

  1. 创建多个节点
  2. 在每个节点的redis.conf中启用集群:
    cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000
  3. 使用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 --bigkeys

10.2 日志分析

建议在redis.conf中配置:

logfile "/var/log/redis/redis.log" loglevel notice

定期检查日志:

sudo tail -f /var/log/redis/redis.log

10.3 备份策略

  1. RDB备份:

    # 手动触发 redis-cli SAVE # 或 redis-cli BGSAVE
  2. AOF备份: 确保配置:

    appendonly yes appendfsync everysec
  3. 自动化备份脚本:

    #!/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版本

  1. 停止当前Redis服务
  2. 备份数据和配置文件
  3. 下载并编译新版本
  4. 测试新版本功能
  5. 逐步在生产环境部署
# 示例升级步骤 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 redis

12. 卸载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-*