本指南涵盖从源码下载到生产环境运行的全部步骤,采用自定义管理脚本 (非 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 并反馈。