【Redis分布式缓存实战】第4章 单机Redis部署、配置与基础优化

多环境部署:Linux生产环境源码/容器标准化部署

一、部署整体概述与环境规划

1.1 部署目标

实现Redis开发、测试、生产多环境隔离部署,提供两套标准化部署方案(Linux源码编译部署、Docker容器部署),统一各环境目录结构、配置规范、启动方式和运维标准,规避多环境冲突,保障生产环境高可用、安全性、稳定性,同时兼顾开发测试环境的轻量化、易部署特性。

1.2 多环境整体规划

|------------|---------------|------|-------------|---------|-----------------|
| 环境类型 | 部署方式 | 默认端口 | 数据持久化策略 | 日志级别 | 适用场景 |
| 开发环境(dev) | Docker容器快速部署 | 6379 | 关闭持久化 | verbose | 本地开发、功能调试、迭代测试 |
| 测试环境(test) | Docker容器标准化部署 | 6380 | RDB定时持久化 | notice | 功能测试、压力测试、预发布验证 |
| 生产环境(prod) | Linux源码编译部署 | 6381 | RDB+AOF双持久化 | warning | 线上业务承载、高可用稳定运行 |

1.3 基础环境要求

  • 操作系统:CentOS 7+/Ubuntu 18.04+ 64位
  • 内核版本:3.10.0+,关闭透明大页(生产必配)
  • 依赖工具:gcc、make、cmake、wget、tar(源码部署必备);docker、docker-compose(容器部署必备)
  • 权限要求:全程禁止root直接运行Redis,创建独立普通用户管理服务
  • 网络要求:生产环境仅开放内网端口,禁止公网直接访问,配置防火墙白名单

二、通用前置配置(所有环境必做)

2.1 系统内核优化(生产核心)

Redis为内存型数据库,需优化系统内核参数,规避OOM、内存溢出、连接受限问题,永久生效配置如下:

  1. 编辑内核参数文件
Crystal 复制代码
vim /etc/sysctl.conf
  1. 追加以下参数
Crystal 复制代码
# 调整Redis最大文件描述符
fs.file-max = 65535
# 关闭TCP时间戳,避免端口占用冲突
net.ipv4.tcp_timestamps = 0
# 调整TCP队列参数
net.ipv4.tcp_syn_backlog = 65535
# 内存分配策略,禁止OOM随机杀死进程
vm.overcommit_memory = 1
# 关闭透明大页(解决Redis延迟抖动问题)
transparent_hugepage=never
  1. 生效配置
Crystal 复制代码
sysctl -p

2.2 文件句柄数优化

Redis高并发场景需提升最大文件打开数,编辑limits配置:

Crystal 复制代码
vim /etc/security/limits.conf

追加内容:

Crystal 复制代码
redis soft nofile 65535
redis hard nofile 65535

2.3 创建独立运行用户

所有环境统一创建redis普通用户,禁止root启动服务,保障安全:

Crystal 复制代码
# 创建用户,禁止登录系统
useradd -s /sbin/nologin -M redis
# 设置目录权限
chmod -R 755 /usr/local/redis
chown -R redis:redis /usr/local/redis

三、生产环境Redis源码标准化部署

源码编译部署为生产环境首选方案,性能最优、配置自由度高、无容器虚拟化损耗,适配线上高并发、高可用场景。

3.1 安装依赖环境

Crystal 复制代码
# CentOS
yum install -y gcc gcc-c++ make cmake wget tar

# Ubuntu
apt install -y gcc make cmake wget tar

3.2 下载并解压源码包

统一使用稳定版Redis(当前最新稳定版7.2.5),官方源码包部署,规避第三方包漏洞:

Crystal 复制代码
# 进入安装目录
cd /usr/local
# 下载源码
wget https://download.redis.io/releases/redis-7.2.5.tar.gz
# 解压
tar -zxvf redis-7.2.5.tar.gz
# 重命名统一目录
mv redis-7.2.5 redis
# 进入编译目录
cd redis

3.3 编译安装

Crystal 复制代码
# 编译(开启多核编译,加速部署)
make -j$(nproc)
# 安装到系统目录
make install

3.4 标准化目录规划

生产环境统一目录结构,规范日志、数据、配置、PID文件存放路径,便于运维管理:

Crystal 复制代码
# 创建标准化子目录
mkdir -p /usr/local/redis/{conf,data,logs,pid}
  • conf:存放自定义配置文件
  • data:存放RDB、AOF持久化数据
  • logs:存放运行日志、错误日志
  • pid:存放进程PID文件

3.5 生产级配置文件优化

复制默认配置文件并自定义生产专属配置,关闭危险命令、开启双持久化、配置密码、限制访问:

Crystal 复制代码
# 复制默认配置
cp /usr/local/redis/redis.conf /usr/local/redis/conf/redis-prod.conf

编辑生产配置文件 ​​vim /usr/local/redis/conf/redis-prod.conf​​,修改核心参数:

Crystal 复制代码
# 基础配置
port 6381
bind 127.0.0.1 内网IP  # 仅内网访问,禁止0.0.0.0全网暴露
daemonize yes          # 后台运行
pidfile /usr/local/redis/pid/redis.pid
logfile /usr/local/redis/logs/redis-prod.log
dir /usr/local/redis/data

# 安全配置
requirepass 自定义强密码  # 设置生产密码
rename-command FLUSHALL ""  # 禁用危险命令
rename-command FLUSHDB ""
rename-command KEYS ""

# 持久化配置(生产双持久化)
save 900 1
save 300 10
save 60 10000
rdbcompression yes
appendonly yes
appendfsync everysec

# 内存优化
maxmemory 16gb  # 根据服务器内存调整,建议不超过物理内存70%
maxmemory-policy allkeys-lru

# 连接优化
tcp-backlog 65535
timeout 0
tcp-keepalive 300

3.6 配置系统自启动服务

创建systemd系统服务,实现开机自启、统一启停管理:

Crystal 复制代码
vim /etc/systemd/system/redis-prod.service

写入服务配置:

Crystal 复制代码
[Unit]
Description=Redis Production Service
After=network.target

[Service]
Type=forking
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /usr/local/redis/conf/redis-prod.conf
ExecStop=/usr/local/bin/redis-cli -p 6381 -a 密码 shutdown
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

重载服务、设置开机自启:

Crystal 复制代码
systemctl daemon-reload
systemctl enable redis-prod
systemctl start redis-prod
systemctl status redis-prod

四、多环境容器标准化部署(开发/测试)

容器部署适用于开发、测试环境,部署快速、环境隔离彻底、无需适配系统依赖,通过docker-compose统一管理多实例,避免环境冲突。

4.1 容器环境前置准备

安装Docker与Docker-Compose:

Crystal 复制代码
# CentOS安装docker
yum install -y docker-ce docker-ce-cli containerd.io
# 启动docker并开机自启
systemctl start docker && systemctl enable docker

# 安装docker-compose
yum install -y docker-compose

4.2 多环境目录标准化规划

Crystal 复制代码
# 创建统一容器部署目录
mkdir -p /docker/redis/{dev,test}
# 分别创建各环境配置、数据、日志目录
mkdir -p /docker/redis/dev/{conf,data,logs}
mkdir -p /docker/redis/test/{conf,data,logs}

4.3 开发环境(dev)容器配置

4.3.1 开发环境配置文件

创建 ​​/docker/redis/dev/conf/redis-dev.conf​​,轻量化配置,关闭持久化:

Crystal 复制代码
port 6379
bind 0.0.0.0
daemonize no
logfile /data/logs/redis-dev.log
# 关闭持久化,提升开发速度
save ""
appendonly no
maxmemory 4gb
maxmemory-policy allkeys-lru
4.3.2 开发环境docker-compose.yml

创建 ​​/docker/redis/dev/docker-compose.yml​​:

Crystal 复制代码
version: '3.8'
services:
  redis-dev:
    image: redis:7.2.5-alpine
    container_name: redis-dev
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - ./conf/redis-dev.conf:/etc/redis/redis.conf
      - ./data:/data
      - ./logs:/data/logs
    command: redis-server /etc/redis/redis.conf
    environment:
      - TZ=Asia/Shanghai

4.4 测试环境(test)容器配置

4.4.1 测试环境配置文件

创建 ​​/docker/redis/test/conf/redis-test.conf​​,模拟生产基础配置,开启RDB持久化:

Crystal 复制代码
port 6380
bind 0.0.0.0
daemonize no
logfile /data/logs/redis-test.log
save 300 10
rdbcompression yes
appendonly no
maxmemory 8gb
maxmemory-policy allkeys-lru
requirepass 测试环境密码
4.4.2 测试环境docker-compose.yml

创建 ​​/docker/redis/test/docker-compose.yml​​:

Crystal 复制代码
version: '3.8'
services:
  redis-test:
    image: redis:7.2.5-alpine
    container_name: redis-test
    restart: always
    ports:
      - "6380:6380"
    volumes:
      - ./conf/redis-test.conf:/etc/redis/redis.conf
      - ./data:/data
      - ./logs:/data/logs
    command: redis-server /etc/redis/redis.conf
    environment:
      - TZ=Asia/Shanghai

4.5 容器环境启动与验证

Crystal 复制代码
# 启动开发环境Redis
cd /docker/redis/dev
docker-compose up -d

# 启动测试环境Redis
cd /docker/redis/test
docker-compose up -d

# 查看运行状态
docker ps | grep redis

五、多环境隔离核心规范

5.1 端口隔离

严格遵循环境端口区分:开发6379、测试6380、生产6381,杜绝端口冲突,所有环境端口统一备案,防火墙仅开放对应环境端口。

5.2 数据隔离

  • 源码生产环境:数据存放于 /usr/local/redis/data,独立磁盘分区挂载
  • 容器开发/测试环境:数据挂载至宿主机独立目录,互不干扰
  • 禁止跨环境数据拷贝覆盖,定期区分备份各环境数据

5.3 权限隔离

  • 生产环境:仅redis用户拥有目录权限,root只读,禁止普通用户修改配置
  • 测试/开发环境:适度放宽权限,但禁止全局777权限

六、生产环境运维标准化规范

6.1 启停管理

Crystal 复制代码
# 启动
systemctl start redis-prod
# 停止(安全停机,持久化数据)
systemctl stop redis-prod
# 重启
systemctl restart redis-prod
# 状态查看
systemctl status redis-prod

6.2 数据备份规范

生产环境每日凌晨自动备份RDB+AOF数据,保留7天备份文件,配置定时任务:

Crystal 复制代码
crontab -e
# 追加定时备份任务
0 0 * * * /usr/bin/cp -rf /usr/local/redis/data/* /data/redis-backup/$(date +%Y%m%d) && rm -rf /data/redis-backup/$(date -d "7 days ago" +%Y%m%d)

6.3 日志运维

配置日志切割,避免日志文件过大,安装logrotate实现自动切割:

Crystal 复制代码
vim /etc/logrotate.d/redis-prod

写入配置:

Crystal 复制代码
/usr/local/redis/logs/redis-prod.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    dateext
}

七、部署验证标准

7.1 基础连通性验证

Crystal 复制代码
# 生产环境连接验证
redis-cli -p 6381 -a 密码 ping

# 测试环境连接验证
redis-cli -p 6380 -a 密码 ping

# 开发环境连接验证
redis-cli -p 6379 ping

返回 ​​PONG​​ 即为部署成功。

7.2 配置校验

分别查看各环境核心配置,确认端口、持久化、内存参数生效,无配置冲突。

7.3 进程校验

Crystal 复制代码
# 查看Redis进程
ps -ef | grep redis
# 确认运行用户、端口、配置文件路径正确

八、常见问题排查

  • 启动失败:端口占用 :通过 netstat -lnp | grep 端口 查找占用进程,终止冲突进程或修改对应环境端口
  • 生产内存溢出:检查maxmemory配置,优化系统vm.overcommit_memory参数,清理无用缓存
  • 容器挂载权限不足 :执行chmod -R 777 /docker/redis/* 临时授权,或修改宿主机目录属主
  • 开机自启不生效 :重新执行 systemctl daemon-reload 重载服务配置

核心配置文件详解:内存、网络、日志、持久化基础配置

本节针对前文部署的多环境Redis,深度解析四大核心配置模块,包含参数释义、默认规则、环境差异化配置、生产优化要点,所有配置适配Redis7.x版本,完全兼容本文源码与容器部署方案,可直接落地复用。

2.1 内存核心配置(重中之重)

内存是Redis最核心的资源,所有数据默认存储于内存,合理配置可彻底规避内存溢出、OOM杀死进程、数据淘汰异常等问题,适配前文生产内存溢出故障排查方案。

2.1.1 核心参数详解
  • maxmemory:Redis最大可用内存阈值,默认无限制。Redis启动后所有数据加载至内存,达到阈值后触发数据淘汰策略。生产环境必须配置,建议设置为服务器物理内存的60%-70%,预留内存给系统内核与其他进程。 环境适配:生产16gb、测试8gb、开发4gb,禁止设置0(无限制),避免内存打满宕机。
  • maxmemory-policy:内存淘汰策略,内存达到maxmemory时触发,共8种策略,生产优选LRU算法。 常用策略: 1. allkeys-lru:优先淘汰最近最少使用的所有key(生产通用最优); 2. volatile-lru:仅淘汰设置过期时间的最少使用key; 3. allkeys-random:随机淘汰任意key(不推荐); 4. noeviction:内存满后拒绝写入,只可读(高一致性业务可选)。
  • vm.overcommit_memory(系统级内存配置):配合Redis内存管控,值为1时允许系统超额分配内存,彻底解决Redisfork子进程持久化时内存申请失败问题,是生产环境必配内核参数。
2.1.2 多环境标准化配置
Crystal 复制代码
# 生产环境
maxmemory 16gb
maxmemory-policy allkeys-lru

# 测试环境
maxmemory 8gb
maxmemory-policy allkeys-lru

# 开发环境
maxmemory 4gb
maxmemory-policy allkeys-lru
2.1.3 避坑要点

未配置maxmemory会导致Redis无限占用内存,最终被系统OOM机制强制杀死;淘汰策略选错会引发业务数据丢失、缓存命中率下降等问题。

2.2 网络核心配置

网络配置决定Redis连接安全性、并发承载能力、连接稳定性,是多环境隔离、防攻击、高并发适配的关键,生产环境重点保障内网安全与高并发队列。

2.2.1 核心参数详解
  • port:服务监听端口,本文严格隔离:开发6379、测试6380、生产6381,杜绝端口冲突。
  • bind:监听IP地址,核心安全参数。 生产配置:bind 内网IP 127.0.0.1,仅内网本机及内网设备访问,禁止0.0.0.0全网暴露,防止公网攻击; 测试/开发配置:bind 0.0.0.0,方便调试与跨设备访问。
  • tcp-backlog:TCP连接队列最大长度,默认511,高并发生产环境调至65535,避免连接排队、新建连接失败,需配合系统net.ipv4.tcp_syn_backlog内核参数同步优化。
  • timeout:客户端空闲连接超时时间,单位秒,0表示不主动断开空闲连接,生产推荐0,避免频繁重连。
  • tcp-keepalive:TCP保活探测周期,默认300秒,检测僵尸连接并自动释放,回收无效连接资源,提升并发稳定性。
  • maxclients:最大客户端连接数,默认10000,可根据业务并发调整,连接数超限后拒绝新连接并返回报错。
2.2.2 多环境标准化配置
Crystal 复制代码
# 生产环境
port 6381
bind 内网IP 127.0.0.1
tcp-backlog 65535
timeout 0
tcp-keepalive 300
maxclients 10000

# 测试环境
port 6380
bind 0.0.0.0
tcp-backlog 65535
timeout 0
tcp-keepalive 300

# 开发环境
port 6379
bind 0.0.0.0
tcp-backlog 1024
timeout 0

2.3 日志核心配置

日志配置用于记录Redis运行状态、错误信息、操作日志,是运维排查故障、追溯问题的核心依据,各环境差异化区分日志级别与存储规则。

2.3.1 核心参数详解
  • logfile:日志文件绝对路径,统一标准化目录,生产独立日志目录,便于日志切割与归档。
  • loglevel:日志级别,四级逐级精简: 1. verbose(详细):记录所有操作,适用于开发调试; 2. notice(正常):记录常规重要日志,适用于测试环境; 3. warning(警告):仅记录错误、警告日志,生产环境首选,减少日志磁盘占用; 4. debug(调试):极低环境使用,生产禁止开启。
  • syslog-enabled:是否开启系统日志,生产可开启,适配统一日志收集平台。
2.3.2 多环境标准化配置
Crystal 复制代码
# 生产环境
logfile /usr/local/redis/logs/redis-prod.log
loglevel warning

# 测试环境
logfile /data/logs/redis-test.log
loglevel notice

# 开发环境
logfile /data/logs/redis-dev.log
loglevel verbose
2.3.3 运维配套规范

生产环境必须搭配logrotate日志切割策略,按天切割、保留7天日志、自动压缩归档,避免单日志文件过大占用磁盘,配置规则见前文6.3章节。

2.4 持久化核心配置

Redis持久化用于将内存数据落地磁盘,防止服务重启、宕机导致数据丢失,包含RDB快照、AOF日志两种方式,各环境按需组合配置,兼顾性能与数据安全性。

2.4.1 RDB持久化(快照持久化)

核心原理:按指定时间间隔,触发内存数据全量快照,写入RDB文件,性能高、恢复速度快,适合冷备份。

  • save:RDB触发规则,格式为 save 秒数 数据修改次数,满足任一条件即触发快照: 生产默认:save 900 1、save 300 10、save 60 10000; 测试环境:save 300 10; 开发环境:save "" 关闭RDB。
  • rdbcompression:开启RDB文件压缩,默认yes,节省磁盘空间,轻微消耗CPU,生产开启。
  • rdbchecksum:开启RDB文件校验,防止文件损坏,保障数据完整性。
2.4.2 AOF持久化(日志持久化)

核心原理:记录每一条写入操作指令,重启时重放指令恢复数据,数据安全性极高,可实现秒级数据不丢失。

  • appendonly:是否开启AOF,生产yes,测试/开发no。
  • appendfsync:AOF刷盘策略,核心三级策略: 1. always:每条写入立即刷盘,数据最安全,性能最差; 2. everysec:每秒批量刷盘,平衡性能与安全性,生产首选; 3. no:交由系统自动刷盘,性能最高,数据安全性差。
  • auto-aof-rewrite-percentage/min-size:AOF文件重写触发条件,避免日志文件无限膨胀,默认100%增量、最小64M,生产默认适配即可。
2.4.3 多环境标准化持久化方案
Crystal 复制代码
# 生产环境(RDB+AOF双持久化,高安全)
save 900 1
save 300 10
save 60 10000
rdbcompression yes
appendonly yes
appendfsync everysec

# 测试环境(仅RDB,兼顾性能与基础数据留存)
save 300 10
rdbcompression yes
appendonly no

# 开发环境(全关闭,极致性能)
save ""
appendonly no
2.4.4 核心避坑要点

生产环境禁止单独使用RDB,存在分钟级数据丢失风险;禁止单独高频AOF,会损耗性能;双持久化组合是生产最优方案。开发环境关闭持久化,可大幅提升Redis读写性能,适配调试场景。

2.5 通用安全配置(配套核心优化)

搭配四大核心配置的生产安全必配项,规避误操作与非法访问:

Crystal 复制代码
# 密码认证
requirepass 自定义强密码
# 禁用高危命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""

单机性能压测、基准数据查看与基础参数调优

Redis 官方自带redis-benchmark 压测工具,无需额外部署,是单机压测的最佳选择;基准数据基于通用服务器硬件给出行业标准值;调优分为操作系统内核调优 (核心)、Redis 配置调优运行时优化三层,新手可直接照搬命令落地。

一、Redis 单机压测(redis-benchmark 实战)

​redis-benchmark​​ 是 Redis 原生自带的基准测试工具,支持并发、指定命令、数据大小、Pipeline 等压测场景,随 Redis 安装包自动部署,直接在服务器终端执行即可。

核心常用参数

表格

|-----------|-----------------|------------------------|
| 参数 | 作用 | 示例 |
| -h | Redis 主机 IP | -h 127.0.0.1 |
| -p | Redis 端口 | -p 6379 |
| -a | Redis 密码(有密码才加) | -a 123456 |
| -c | 并发连接数 | -c 100(100 个并发) |
| -n | 总请求数 | -n 100000(10 万请求) |
| -d | 数据大小(字节) | -d 32(32 字节 value) |
| -t | 指定测试命令 | -t get,set(只测 GET/SET) |
| --threads | 多线程压测(Redis6+) | --threads 4 |
| -P | Pipeline 批量命令数 | -P 100(100 个命令批量发) |
| -q | 精简输出结果 | - |

实战压测命令(直接复制执行)

(1)默认全命令压测

压测所有常用命令,默认 10 万请求、50 并发、3 字节数据:

bash

运行

Crystal 复制代码
redis-benchmark -h 127.0.0.1 -p 6379 -q
(2)指定 GET/SET 核心命令压测(最常用)

100 并发、10 万请求、32 字节数据,只测 GET/SET:

bash

运行

Crystal 复制代码
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000 -d 32 -t get,set -q
(3)Pipeline 压测(极限提升 QPS)

Pipeline 是 Redis 性能提升的关键,批量发送命令减少网络开销:

bash

运行

Crystal 复制代码
# 100个命令批量发送,100并发,10万请求
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000 -P 100 -t get,set -q
(4)带密码、多线程压测

bash

运行

Crystal 复制代码
redis-benchmark -h 127.0.0.1 -p 6379 -a 123456 -c 200 -n 200000 --threads 4 -q

压测结果解读

重点关注 3 个核心指标:

  1. QPS:每秒处理请求数(性能核心);
  2. 延迟avg(平均延迟)、p99(99% 请求的最大延迟,毛刺关键);
  3. 错误率:必须为 0,否则说明压测 / 配置异常。

示例输出:

plaintext

Crystal 复制代码
SET: 112000.00 requests per second
GET: 115000.00 requests per second

二、Redis 单机基准性能数据(行业标准)

基于通用云服务器(2 核 4G、千兆网卡、SSD、Redis 7.0、无持久化、内核调优后)的单机基准:

表格

|-------------------|------|------------|-------|
| 压测场景 | 数据大小 | QPS(每秒请求数) | 平均延迟 |
| 无 Pipeline GET | 10B | ~11 万 | <1ms |
| 无 Pipeline SET | 10B | ~10 万 | <1ms |
| Pipeline(100) GET | 10B | ~60 万 + | <2ms |
| Pipeline(100) SET | 10B | ~50 万 + | <2ms |

关键影响因素

  1. 持久化 :开启 AOF 的always会让 QPS 暴跌 90%;
  2. 数据大小:value 越大,QPS 越低(1KB 数据 QPS 会降至 5 万左右);
  3. 命令复杂度KEYS *HGETALL等慢命令会大幅拉低性能;
  4. CPU:Redis 单线程工作,单核性能直接决定 QPS 上限。

实时查看 Redis 运行基准

连接 Redis 执行​​info​​命令,查看实时性能数据:

bash

运行

Crystal 复制代码
redis-cli -p 6379 info stats

核心字段:

  • ​instantaneous_ops_per_sec​实时 QPS
  • ​total_commands_processed​:总处理命令数。

三、Redis 单机基础参数调优(三步落地)

调优优先级:操作系统内核 > Redis 配置 > 运行时优化 ,以下命令全部可直接执行,适配 CentOS/Ubuntu。

第一步:操作系统内核调优(必须做,性能提升 50%+)

Redis 是内存 + 网络型应用,内核参数是性能瓶颈的核心。

禁用 Swap(防止内存置换导致延迟暴增)

bash

运行

Crystal 复制代码
# 临时禁用echo 0 > /proc/sys/vm/swappiness
# 永久禁用(重启生效)echo "vm.swappiness=0" >> /etc/sysctl.conf
开启内存过量分配(避免 Redis OOM 崩溃)

bash

运行

Crystal 复制代码
# 临时生效echo 1 > /proc/sys/vm/overcommit_memory
# 永久生效echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
优化网络参数(减少连接开销)

bash

运行

Crystal 复制代码
cat >> /etc/sysctl.conf << EOF
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
EOF# 加载内核参数sysctl -p
禁用透明大页 THP(导致 Redis 延迟毛刺)

bash

运行

Crystal 复制代码
# 临时禁用echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久禁用(开机自执行)cat >> /etc/rc.local << EOF
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
提升最大文件描述符(解决连接数上限)

bash

运行

Crystal 复制代码
cat >> /etc/security/limits.conf << EOF
redis soft nofile 65535
redis hard nofile 65535
root soft nofile 65535
root hard nofile 65535
EOF

第二步:Redis 配置文件调优(redis.conf)

修改 Redis 核心配置,重启后生效,路径:/etc/redis/redis.conf

ini

Crystal 复制代码
# 1. 网络优化
bind 内网IP          # 只监听内网,避免外网攻击
protected-mode no    # 关闭保护模式(内网环境)
timeout 0            # 长连接,不主动断开
tcp-keepalive 300    # 心跳保活

# 2. 内存优化(核心)
maxmemory 3G         # 单机最大内存(物理内存的70%,4G机器设3G)
maxmemory-policy allkeys-lru  # 内存满后删除最少使用的key
lazyfree-lazy-eviction yes   # 惰性删除,避免阻塞主线程

# 3. 持久化优化(性能优先)# 关闭自动RDB持久化(注释掉所有save行)# save 3600 1# save 300 100# save 60 10000
appendonly no        # 关闭AOF(追求极致性能)
# 若必须开AOF,用这个配置:appendfsync everysec(每秒刷盘,平衡性能/安全)# 4. 客户端优化
maxclients 10000     # 最大连接数

修改后重启 Redis:

bash

运行

Crystal 复制代码
systemctl restart redis-server

第三步:运行时优化(无侵入,提升性能)

  1. 绑定 CPU 核心:Redis 单线程工作,绑定独占 CPU,减少上下文切换
  2. bash
  3. 运行
Crystal 复制代码
taskset -c 0 redis-server /etc/redis/redis.conf
  1. 禁用慢命令 :禁止使用KEYS *HGETALLSMEMBERS,用SCAN系列命令代替;
  2. 使用连接池:业务端用 Redis 连接池,避免频繁创建 / 销毁连接;
  3. 批量操作:业务中强制使用 Pipeline,减少网络 IO。

四、调优后验证

  1. 重新执行压测命令,对比 QPS 和延迟:
  2. bash
  3. 运行
Crystal 复制代码
redis-benchmark -c 100 -n 100000 -t get,set -q
  1. 查看实时 QPS:
  2. bash
  3. 运行
Crystal 复制代码
redis-cli info stats | grep instantaneous_ops_per_sec
  1. 查看内存 / 配置是否生效:

  2. bash

  3. 运行

    redis-cli config get maxmemory
    redis-cli config get appendonly


总结

  1. 压测 :用redis-benchmark,核心加-P开启 Pipeline,重点看 QPS 和 p99 延迟;
  2. 基准:单机无 Pipeline GET~11 万 QPS,Pipeline 后~60 万 QPS;
  3. 调优:先改内核(禁 Swap/THP、网络参数),再调 Redis 配置(内存 / 持久化),最后优化业务使用(Pipeline、禁慢命令)。

按照以上步骤操作,普通 2 核服务器的 Redis 单机 QPS 可轻松达到10 万 + ,Pipeline 场景突破50 万 +

相关推荐
卷毛迷你猪1 小时前
快速实验篇(A3)基于 Hive 的气象数据数仓构建与干旱指标初步分析
大数据·hadoop·分布式
卷毛迷你猪1 小时前
快速实验篇(A4)Hive 数据仓库进阶:全站点干旱事件识别与多维统计分析
数据仓库·hive·hadoop·分布式
sukioe2 小时前
Redis 入门:为什么出现、核心原理与安装配置
数据库·redis·缓存
宇砾2 小时前
浅谈Redis(1)
数据库·redis·缓存
玄米乌龙茶1232 小时前
数据库与缓存核心概念
数据库·缓存
消失的旧时光-19432 小时前
企业认证与安全体系(五):Spring Security + JWT + Redis 企业级认证实战
redis·安全·spring·spring security·jwt
RingWu2 小时前
高并发三板斧-异步
分布式·微服务·架构
会编程的土豆3 小时前
Redis 常用操作笔记(Go 开发实战)
redis·笔记·golang
JP-Destiny3 小时前
docker-安装redis
java·redis·docker