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.rdbappendonly.aof 到远程存储。
  • 若仅需内网访问,将 bind 改为具体内网 IP(如 10.0.0.100),而非 0.0.0.0
  • 定期更新 Redis 版本以修复安全漏洞。

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

相关推荐
weixin_4407305013 分钟前
数据库缓存、索引、缓存命中率的理解
数据库·缓存
DeepAgent42 分钟前
AI Agent 工程实践(34):企业 AI Agent 架构
数据库·人工智能·agent
致Great1 小时前
Qwen3.8-Flash 发布:6B 激活,Qwen4 架构提前亮相
数据库·架构
张文君2 小时前
ubuntu26.04从ext4改成raid1+lvm启动
数据库·postgresql
鲨鱼辣钊2 小时前
FastAPI筑基_Day15_Alembic数据库迁移实战
数据库·elasticsearch·fastapi
叫我:松哥2 小时前
基于Flask的教师评教管理系统,支持学生和教师两种角色登录
数据库·后端·python·数据挖掘·flask
Tisfy2 小时前
LeetCode 3720.大于目标字符串的最小字典序排列:状态机 —— :从左往右枚举,失败则退回(最多退回一次)
linux·数据库·leetcode·字符串·状态机·构造
csdn_aspnet2 小时前
mysql 函数、存储过程写法及示例
数据库·mysql·存储过程·函数·function·procedure
IvorySQL2 小时前
倒计时 6 天!PGConf.Asia 2026 演讲征集即将截止
数据库·人工智能·postgresql