Redis 是高性能键值型 NoSQL 数据库 ,常用于缓存、消息队列、分布式锁、会话存储等场景。本文从安装配置 → 核心配置优化 → 性能优化 → 安全优化 → 持久化优化 → 集群 / 高可用全流程讲解,直接可用于生产环境。
一、Redis 基础安装(Linux)
bash
运行
# 1. 安装依赖
yum install -y gcc gcc-c++ make
# 2. 下载解压(推荐稳定版 7.0+/6.2+)
wget https://download.redis.io/releases/redis-6.2.14.tar.gz
tar -zxvf redis-6.2.14.tar.gz
cd redis-6.2.14
# 3. 编译安装
make && make install PREFIX=/usr/local/redis
# 4. 复制配置文件
mkdir -p /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc/
启动命令
bash
运行
# 后台启动(生产必须用配置文件启动)
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
二、Redis 核心配置(redis.conf)
1. 基础必改配置
ini
# 允许后台运行
daemonize yes
# 绑定监听地址(生产不要用 0.0.0.0,除非有防火墙)
bind 127.0.0.1 192.168.1.100
# 默认端口
port 6379
# PID 文件路径
pidfile /var/run/redis_6379.pid
# 日志文件
logfile "/var/log/redis.log"
# 数据存放目录
dir /var/lib/redis
2. 安全配置(生产必备)
ini
# 设置密码(强度要高)
requirepass 123456Abc!@#
# 禁止危险命令(防止误删)
rename-command CONFIG ""
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command KEYS ""
# 关闭危险的保护模式(公网环境必须配合密码+防火墙)
protected-mode no
3. 内存优化配置
ini
# 最大可用内存(根据服务器配置,建议不超过物理内存的 50%)
maxmemory 8gb
# 内存淘汰策略(缓存场景必选)
maxmemory-policy allkeys-lru
# 内存碎片整理(自动开启)
activedefrag yes
淘汰策略说明
allkeys-lru:删除最近最少使用的 key(缓存首选)volatile-lru:只删除过期的最少使用 keynoeviction:不删除,直接报错(不推荐缓存使用)
三、Redis 性能优化(核心)
1. 内存优化
- 控制内存上限 :必须设置
maxmemory,防止 OOM 杀死进程 - 合理淘汰策略 :缓存用
allkeys-lru - 避免大 key
- 字符串 > 10KB、集合 > 10000 个元素都算大 key
- 大 key 会导致阻塞、网络延迟、迁移失败
- 避免海量小 key :用
hash结构聚合存储
2. 网络优化
ini
# 关闭 TCP 延迟(提高响应)
tcp-nodelay yes
# 连接超时(秒)
timeout 300
# 最大客户端连接数
maxclients 10000
系统层面优化:
bash
运行
# 调整文件句柄数
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
3. CPU 优化
- 绑定 CPU(多核服务器)
ini
# 绑定 CPU 核心,减少上下文切换
server_cpulist 0,1
- 避免单核过载,Redis 单线程模型,单核性能决定速度
4. 避免慢查询
- 禁用
KEYS *、HGETALL、LRANGE 0 -1等全量遍历命令 - 用
SCAN、HSCAN代替
四、持久化优化(RDB + AOF)
Redis 提供两种持久化方式,生产推荐混合持久化。
1. RDB 配置(快照)
ini
save 3600 1 # 1小时 1个key变化
save 300 100 # 5分钟 100个key
save 60 10000 # 1分钟 10000个key
rdbcompression yes # 压缩
rdbchecksum yes # 校验
2. AOF 配置(日志)
ini
appendonly yes # 开启 AOF(生产必须开)
appendfilename "appendonly.aof"
# 刷盘策略(生产推荐 everysec)
# always:每次写入都刷盘(最安全、最慢)
# everysec:每秒刷盘(折中,推荐)
# no:由操作系统决定(最快)
appendfsync everysec
# AOF 重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
3. 持久化最佳实践
- 缓存场景:关闭 RDB,AOF = everysec
- 数据存储场景:开启混合持久化(Redis 4.0+ 默认开启)
- 高写入场景:关闭自动持久化,通过脚本定时备份 RDB
五、安全优化(公网 / 生产必做)
- 设置强密码
- 禁用危险命令
- 防火墙限制 IP
bash
运行
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="6379" accept'
- 不要使用 root 用户运行 Redis
- 修改默认端口(不要用 6379)
- 禁止外网直接访问
六、高可用与集群优化(大型业务)
1. 主从复制(读写分离)
- 主节点写,从节点读
- 配置
replicaof <master-ip> <port> - 从节点只读:
replica-read-only yes
2. Redis Sentinel(哨兵)
- 自动故障转移
- 至少 3 个哨兵节点,防止脑裂
3. Redis Cluster(集群)
- 分布式存储,突破单机内存限制
- 官方推荐:3 主 3 从 最小配置
- 自动分片、高可用
七、一键检查 Redis 状态命令
bash
运行
# 连接
redis-cli -a 密码
# 查看内存
info memory
# 查看客户端连接
info clients
# 查看持久化
info persistence
# 查看慢查询
SLOWLOG GET 10
八、生产环境配置总结(直接复制)
ini
daemonize yes
bind 127.0.0.1 192.168.1.100
port 6379
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis.log"
dir /var/lib/redis
requirepass Redis@123456
rename-command CONFIG ""
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command KEYS ""
maxmemory 8gb
maxmemory-policy allkeys-lru
activedefrag yes
tcp-nodelay yes
timeout 300
maxclients 10000
appendonly yes
appendfsync everysec
总结
- 核心优化:内存限制 + 淘汰策略 + 避免大 key + 持久化策略
- 安全:密码 + 禁用危险命令 + 防火墙
- 性能:网络、CPU、慢查询、连接数优化
- 高可用:主从 + 哨兵 / 集群