Redis 7.0.9 完整部署指南

本指南涵盖从源码下载到生产环境运行的全部步骤,采用自定义管理脚本 (非 systemd)、持久化(RDB+AOF) 、强密码 、五位端口(12345),并将 PID 及数据文件统一存放于配置目录。


1. 环境准备

安装编译工具及依赖:

bash 复制代码
sudo yum install gcc make tcl wget -y

2. 下载 Redis 源码

bash 复制代码
cd /opt/software
wget https://download.redis.io/releases/redis-7.0.9.tar.gz
tar -zxvf redis-7.0.9.tar.gz

3. 编译与安装

bash 复制代码
cd redis-7.0.9
make -j 4
make PREFIX=/opt/software/redis install

4. 创建必要目录

bash 复制代码
mkdir -p /opt/software/redis/conf
mkdir -p /opt/software/redis/logs

5. 生成强密码

bash 复制代码
openssl rand -base64 32

记录输出,例如 xK9mPqR2sT5uVwX7yZ1aBcDeFgHiJkL3。

6. 编写配置文件

创建 /opt/software/redis/conf/redis.conf,内容如下(将 <你的密码> 替换为实际密码):

nginx 复制代码
# ============================================
# Redis 7.0.9 配置文件
# 端口:12345
# 数据目录:/opt/software/redis/conf
# 日志目录:/opt/software/redis/logs
# ============================================

# -------------------- 基础设置 --------------------
bind 0.0.0.0
port 12345
daemonize yes
pidfile /opt/software/redis/conf/redis_12345.pid
loglevel notice
logfile /opt/software/redis/logs/redis.log
databases 16

# -------------------- 安全 --------------------
requirepass <你的密码>
protected-mode yes

# -------------------- RDB 持久化 --------------------
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /opt/software/redis/conf
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes

# -------------------- AOF 持久化 --------------------
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes

# -------------------- 内存策略 --------------------
maxmemory-policy allkeys-lru
# maxmemory 2gb   # 按需开启

# -------------------- 慢查询 --------------------
slowlog-log-slower-than 10000
slowlog-max-len 128

# -------------------- 网络 --------------------
tcp-backlog 511
timeout 0
tcp-keepalive 300

重要 :配置文件中所有注释均为独立行,无行内注释,避免解析错误。

7. 创建管理脚本

创建 /opt/software/redis/bin/redis.sh,内容如下(无需修改,脚本自动读取配置):

bash 复制代码
#!/bin/bash
# =============================================
# Redis 管理脚本
# 使用方式:./redis.sh {start|stop|restart|status}
# =============================================

REDIS_HOME="/opt/software/redis"
REDIS_SERVER="${REDIS_HOME}/bin/redis-server"
REDIS_CLI="${REDIS_HOME}/bin/redis-cli"
CONF_FILE="${REDIS_HOME}/conf/redis.conf"

PIDFILE=$(grep -E '^pidfile ' "$CONF_FILE" | awk '{print $2}')
PORT=$(grep -E '^port ' "$CONF_FILE" | awk '{print $2}')
PASSWORD=$(grep -E '^requirepass ' "$CONF_FILE" | awk '{print $2}' | sed 's/"//g')

[ -z "$PIDFILE" ] && PIDFILE="${REDIS_HOME}/conf/redis.pid"

check_running() {
    if [ -f "$PIDFILE" ]; then
        PID=$(cat "$PIDFILE")
        if ps -p "$PID" > /dev/null 2>&1; then
            return 0
        else
            rm -f "$PIDFILE"
            return 1
        fi
    else
        return 1
    fi
}

start() {
    if check_running; then
        echo "Redis 已在运行 (PID: $(cat $PIDFILE))"
        exit 0
    fi
    echo "正在启动 Redis..."
    $REDIS_SERVER "$CONF_FILE"
    sleep 1
    if check_running; then
        echo "✅ Redis 启动成功,端口: $PORT,PID: $(cat $PIDFILE)"
    else
        echo "❌ 启动失败,请查看日志: ${REDIS_HOME}/logs/redis.log"
        exit 1
    fi
}

stop() {
    if ! check_running; then
        echo "Redis 未运行"
        exit 0
    fi
    PID=$(cat "$PIDFILE")
    echo "正在停止 Redis (PID: $PID)..."
    if [ -n "$PASSWORD" ]; then
        $REDIS_CLI -p "$PORT" -a "$PASSWORD" shutdown 2>/dev/null
    else
        $REDIS_CLI -p "$PORT" shutdown 2>/dev/null
    fi
    for i in {1..10}; do
        if ! ps -p "$PID" > /dev/null 2>&1; then
            break
        fi
        sleep 1
    done
    if ps -p "$PID" > /dev/null 2>&1; then
        echo "⚠️ 强制终止进程..."
        kill -9 "$PID"
    fi
    rm -f "$PIDFILE"
    echo "✅ Redis 已停止"
}

status() {
    if check_running; then
        PID=$(cat "$PIDFILE")
        echo "✅ Redis 正在运行"
        echo "   PID: $PID"
        echo "   端口: $PORT"
        if [ -n "$PASSWORD" ]; then
            $REDIS_CLI -p "$PORT" -a "$PASSWORD" INFO memory 2>/dev/null | grep -E "used_memory_human|used_memory_peak_human" | sed 's/^/   /'
        fi
    else
        echo "❌ Redis 未运行"
    fi
}

restart() {
    stop
    sleep 1
    start
}

usage() {
    echo "用法: $0 {start|stop|restart|status}"
    exit 1
}

case "$1" in
    start)   start ;;
    stop)    stop ;;
    restart) restart ;;
    status)  status ;;
    *)       usage ;;
esac

赋予执行权限:

bash 复制代码
chmod +x /opt/software/redis/bin/redis.sh

8. 启动 Redis

bash 复制代码
/opt/software/redis/bin/redis.sh start
/opt/software/redis/bin/redis.sh status

9. 验证连接

本地连接:

bash 复制代码
/opt/software/redis/bin/redis-cli -p 12345 -a '你的密码' ping

远程连接(需服务器公网 IP):

bash 复制代码
redis-cli -h <公网IP> -p 12345 -a '你的密码' ping

10. 防火墙配置(如需远程访问)

检查 firewalld 状态:

bash 复制代码
sudo systemctl status firewalld

若开启,开放端口 12345:

bash 复制代码
sudo firewall-cmd --permanent --add-port=12345/tcp
sudo firewall-cmd --reload

若使用 iptables(当前策略默认 ACCEPT),通常无需额外操作。

11. 常用管理命令

操作 命令
启动 /opt/software/redis/bin/redis.sh start
停止 /opt/software/redis/bin/redis.sh stop
重启 /opt/software/redis/bin/redis.sh restart
状态 /opt/software/redis/bin/redis.sh status
查看日志 tail -f /opt/software/redis/logs/redis.log

13. 数据文件位置

  • RDB 快照:/opt/software/redis/conf/dump.rdb
  • AOF 日志:/opt/software/redis/conf/appendonly.aof
  • PID 文件:/opt/software/redis/conf/redis_12345.pid

14. 安全建议

  • 定期备份 /opt/software/redis/conf/dump.rdb 和 appendonly.aof 到远程存储。
  • 若仅需内网访问,将 bind 改为具体内网 IP(如 10.0.0.100),而非 0.0.0.0。
  • 定期更新 Redis 版本以修复安全漏洞。

部署完成。如有任何启动异常,请查看日志文件 /opt/software/redis/logs/redis.log 并反馈。

相关推荐
hweiyu003 小时前
Redis命令:HSTRLEN
redis·缓存
阳光九叶草LXGZXJ4 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
字节渡客5 小时前
Redis键明明过期了,业务还在读到旧数据
数据库·redis·spring
前端兰博6 小时前
05-Redis
redis·后端
OnlineProxy7 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
辻弋2018 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
可乐鸡翅yeah_9 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
石头麻辣鱼9 小时前
Bamboo 调度系统 OceanBase 适配实战:存储过程迁移踩过的三个大坑
数据库
龙亘川10 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
念何架构之路10 小时前
zap扩展生态与总结
java·前端·数据库