1. 准备环境
yum -y install gcc gcc-c++
2. 解压编译
cd /root
tar -xzf redis-8.2.6.tar.gz
cd redis-8.2.6
make -j$(nproc)
3. 安装到目标目录
mv /root/redis-8.2.6 /usr/local/redis
4. 创建用户和组
groupadd -g 6379 redis
useradd -u 6379 -g redis -s /sbin/nologin -M redis
5. 创建目录结构
mkdir -p /usr/local/redis/{conf,data,log,run}
chown -R redis:redis /usr/local/redis
6. 部署配置文件
# -------------------- 网络配置 --------------------
# 绑定地址:监听本机回环和内网IP,不暴露公网
bind 127.0.0.1 172.30.30.6
# 端口:Redis 默认端口
port 6379
# -------------------- 进程配置 --------------------
# 守护进程:yes=后台运行,no=前台运行
daemonize yes
# PID文件:记录进程ID
pidfile /usr/local/redis/run/redis.pid
# -------------------- 目录配置 --------------------
# 数据目录:RDB和AOF文件存放位置
dir /usr/local/redis/data
# 日志级别:debug < verbose < notice < warning
loglevel notice
# 日志文件:运行日志路径
logfile /usr/local/redis/log/redis.log
# -------------------- 密码认证 --------------------
# 设置访问密码
requirepass qwe123.0
# -------------------- 内存配置 --------------------
# 最大内��:8G * 25% = 2GB,留给MongoDB等其它服务
maxmemory 2gb
# 内存淘汰策略:内存满时淘汰最近最少使用的key
# allkeys-lru: 对所有key进行LRU淘汰
maxmemory-policy allkeys-lru
# -------------------- 连接配置 --------------------
# 客户端超时:空闲300秒(5分钟)后断开连接
timeout 300
# TCP保活:检测连接是否存活,每60秒发送探测包
tcp-keepalive 60
# 最大客户端数:2000并发 * 2倍冗余 = 4000
maxclients 4000
# -------------------- 持久化配置 - RDB --------------------
# RDB触发条件:满足任一条件则触发快照
# 900秒内至少1次写操作
save 900 1
# 300秒内至少10次写操作
save 300 10
# 60秒内至少10000次写操作
save 60 10000
# RDB文件名:快照文件名称
dbfilename dump.rdb
# -------------------- 持久化配置 - AOF --------------------
# 启用AOF:append-only file,追加命令日志
appendonly yes
# AOF刷盘策略:everysec=每秒同步(推荐,平衡性能与安全)
# always=每次写入同步(最安全但慢),no=由操作系统决定(最快但不安全)
appendfsync everysec
# AOF重写触发:文件大小比上次重写时大100%时触发
auto-aof-rewrite-percentage 100
# AOF重写最小大小:至少64MB才触发重写,避免频繁重写
auto-aof-rewrite-min-size 64mb
# -------------------- 慢查询日志 --------------------
# 慢查询阈值:执行时间超过10000微秒(10ms)记录到慢日志
slowlog-log-slower-than 10000
# 慢日志最大条数:保留最近128条慢查询
slowlog-max-len 128
# -------------------- 客户端输出缓冲区限制 --------------------
# normal: 普通客户端无限制
client-output-buffer-limit normal 0 0 0
# replica: 从节点客户端,硬限制256MB,软限制64MB,超时60秒断开
client-output-buffer-limit replica 256mb 64mb 60
# pubsub: 发布订阅客户端,硬限制32MB,软限制8MB,超时60秒断开
client-output-buffer-limit pubsub 32mb 8mb 60
# -------------------- 内存碎片优化 --------------------
# 启用主动碎片整理:自动合并碎片页面
activedefrag yes
# 碎片大小阈值:超过150MB才开始整理
active-defrag-ignore-bytes 150mb
# 碎片率下限:碎片率超过10%开始整理
active-defrag-threshold-lower 10
# 碎片率上限:碎片率超过100%强制立即整理
active-defrag-threshold-upper 100
# 最小CPU占用:整理时最少占用1% CPU
active-defrag-cycle-min 1
# 最大CPU占用:整理时最多占用25% CPU
active-defrag-cycle-max 25
# -------------------- 安全配置 --------------------
# 禁用危险命令:防止误操作清空数据或破坏系统
# 设为空字符串即禁用该命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
rename-command CONFIG ""
rename-command SHUTDOWN ""
7. 系统优化
# 内核参数
echo "vm.overcommit_memory=1" >> /etc/sysctl.d/99-redos.conf
sysctl -p /etc/sysctl.d/99-redis.conf
# 文件描述符
cat > /etc/security/limits.d/99-redis.conf << 'EOF'
redis soft nofile 65535
redis hard nofile 65535
redis soft nproc 65535
redis hard nproc 65535
EOF
8. 配置 systemd 服务
cat > /etc/systemd/system/redis.service << 'EOF'
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
Type=forking
User=redis
Group=redis
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/conf/redis.conf
ExecStop=/bin/kill -SIGTERM $(cat /usr/local/redis/run/redis.pid)
Restart=always
RestartSec=5
LimitNOFILE=65535
LimitNPROC=65535
PIDFile=/usr/local/redis/run/redis.pid
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable redis
9. 启动并验证
systemctl start redis
redis-cli ping
# 期望输出: PONG
4C8G 调优参数
| 参数 | 值 | 说明 |
|---|
| maxmemory | 2gb | 8G内存的25% |
| maxmemory-policy | allkeys-lru | 内存满时淘汰最久未使用的key |
| maxclients | 4000 | 2000并发 × 2倍冗余 |
| appendfsync | everysec | 每秒刷盘 |
| activedefrag | yes | 内存碎片自动整理 |
| slowlog-log-slower-than | 10000 | 10ms以上记慢查询 |