Redis 核心配置详解
Redis 配置文件 redis.conf 包含了数百个配置项,合理配置对 Redis 的性能、稳定性和安全性至关重要。本文将深入解析 Redis 核心配置项,帮助你打造高性能的 Redis 服务。
一、配置文件基础
1.1 配置文件位置
# 默认配置文件位置
/etc/redis/redis.conf # Linux 包安装
/usr/local/etc/redis.conf # macOS Homebrew
redis.conf # 源码编译
# 查看 Redis 配置
redis-cli CONFIG GET * # 获取所有配置
redis-cli CONFIG GET maxmemory # 获取特定配置
1.2 配置文件结构
# Redis 配置文件示例
# 网络配置
port 6379
bind 127.0.0.1
# 内存配置
maxmemory 2gb
maxmemory-policy allkeys-lru
# 持久化配置
save 900 1
save 300 10
save 60 10000
# 安全配置
requirepass your_password
二、内存管理配置
2.1 最大内存限制
# 设置 Redis 最大内存使用量
maxmemory <bytes>
# 示例
maxmemory 2gb # 2GB
maxmemory 512mb # 512MB
maxmemory 0 # 不限制(默认,不推荐生产环境)
配置建议:
- 生产环境必须设置
maxmemory - 建议设置为物理内存的 70%-80%
- 预留内存给操作系统和其他进程
2.2 内存淘汰策略
# 内存淘汰策略
maxmemory-policy <policy>
# 可选策略
maxmemory-policy noeviction # 不淘汰,写操作返回错误(默认)
maxmemory-policy allkeys-lru # 淘汰最近最少使用的键(推荐)
maxmemory-policy volatile-lru # 淘汰最近最少使用的有过期时间的键
maxmemory-policy allkeys-random # 随机淘汰键
maxmemory-policy volatile-random # 随机淘汰有过期时间的键
maxmemory-policy volatile-ttl # 淘汰剩余时间最短的键
策略对比:
| 策略 | 适用场景 | 性能 |
|---|---|---|
allkeys-lru | 缓存场景 | ⭐⭐⭐⭐⭐ |
volatile-lru | 混合数据 | ⭐⭐⭐⭐ |
allkeys-random | 均匀访问 | ⭐⭐⭐ |
volatile-ttl | 定时任务 | ⭐⭐ |
noeviction | 数据完整性要求高 | ⭐ |
配置建议:
# 缓存场景推荐
maxmemory-policy allkeys-lru
# LRU 采样优化
maxmemory-samples 10 # 采样数量,越大越精确,越小越 CPU 友好
2.3 内存碎片管理
# 内存碎片整理
activedefrag yes # 启用主动碎片整理
active-defrag-ignore-bytes 100mb # 碎片超过 100MB 开始整理
active-defrag-threshold-lower 10 # 碎片率低于 10% 不整理
active-defrag-threshold-upper 100 # 碎片率高于 100% 最大化整理
active-defrag-cycle-min 1 # 整理占用 CPU 时间最小百分比
active-defrag-cycle-max 25 # 整理占用 CPU 时间最大百分比
三、网络配置
3.1 端口与绑定
# 监听端口
port 6379
# 绑定地址
bind 127.0.0.1 # 仅本地访问
bind 0.0.0.0 # 所有网络接口(不推荐)
bind 192.168.1.100 # 特定 IP
# 保护模式
protected-mode yes # 启用保护模式(推荐)
安全建议:
- 生产环境不要绑定
0.0.0.0 - 启用
protected-mode - 使用防火墙限制访问
3.2 TCP 配置
# TCP 连接配置
tcp-backlog 511 # TCP 连接队列长度
tcp-keepalive 300 # TCP keepalive 间隔(秒)
timeout 0 # 客户端超时(0=不超时)
# 高性能配置
tcp-backlog 65535 # 高并发场景
tcp-keepalive 60 # 更频繁的 keepalive
3.3 慢查询日志
# 慢查询配置
slowlog-log-slower-than 10000 # 记录超过 10ms 的查询(微秒)
slowlog-max-len 128 # 慢查询日志最大长度
# 查看慢查询
redis-cli SLOWLOG GET 10 # 获取最近 10 条慢查询
redis-cli SLOWLOG LEN # 获取慢查询数量
redis-cli SLOWLOG RESET # 清空慢查询日志
四、持久化配置
4.1 RDB 配置
# RDB 快照配置
save 900 1 # 900 秒内至少 1 个键变化
save 300 10 # 300 秒内至少 10 个键变化
save 60 10000 # 60 秒内至少 10000 个键变化
# RDB 文件配置
dbfilename dump.rdb # RDB 文件名
dir /var/lib/redis # 数据目录
rdbcompression yes # 启用压缩
rdbchecksum yes # 启用校验和
# 停止保存
save "" # 禁用 RDB
4.2 AOF 配置
# AOF 持久化
appendonly no # 禁用 AOF(默认)
appendonly yes # 启用 AOF
# AOF 文件名
appendfilename "appendonly.aof"
# AOF 同步策略
appendfsync always # 每次写入都同步(最安全,最慢)
appendfsync everysec # 每秒同步(推荐)
appendfsync no # 由操作系统决定(最快,不安全)
# AOF 重写
auto-aof-rewrite-percentage 100 # AOF 增长 100% 触发重写
auto-aof-rewrite-min-size 64mb # AOF 最小 64MB 才重写
aof-load-truncated yes # 加载截断的 AOF 文件
同步策略对比:
| 策略 | 数据安全性 | 性能 | 推荐场景 |
|---|---|---|---|
always | 不丢失数据 | 低 | 金融场景 |
everysec | 最多丢失 1 秒 | 中 | 一般场景(推荐) |
no | 可能丢失大量数据 | 高 | 缓存场景 |
4.3 混合持久化
# Redis 4.0+ 混合持久化
aof-use-rdb-preamble yes # AOF 使用 RDB 格式前缀(推荐)
优势:
- 重写速度快
- 加载速度快
- 兼容旧版本
五、安全配置
5.1 密码认证
# 设置密码
requirepass your_strong_password
# 多密码配置(Redis 6+)
acl setuser default on >your_password ~* &* +@all
安全建议:
- 使用强密码(16 位以上,包含大小写、数字、特殊字符)
- 定期更换密码
- 不要在配置文件中明文存储密码
5.2 命令重命名
# 禁用危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""
# 重命名命令
rename-command SHUTDOWN SHUTDOWN_b4d5f6
5.3 ACL 访问控制(Redis 6+)
# 创建用户
acl setuser webuser on >web_password ~app:* +@read +@write -@dangerous
# 用户权限
# on/off: 启用/禁用
# >password: 密码
# ~pattern: 键模式
# +@category: 命令类别
六、性能优化配置
6.1 客户端配置
# 最大客户端连接数
maxclients 10000
# 输出缓冲区限制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
6.2 集群配置
# 集群模式
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-replica-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
6.3 懒删除配置
# 懒删除(Redis 4.0+)
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
启用场景:
# 大键删除场景
lazyfree-lazy-eviction yes # 内存淘汰时懒删除
lazyfree-lazy-expire yes # 过期键懒删除
lazyfree-lazy-server-del yes # 服务器删除时懒删除
七、生产环境配置模板
7.1 缓存场景配置
# 基础配置
port 6379
bind 127.0.0.1
protected-mode yes
timeout 300
tcp-keepalive 60
# 内存配置
maxmemory 4gb
maxmemory-policy allkeys-lru
maxmemory-samples 10
# 持久化(可选)
save ""
appendonly no
# 安全配置
requirepass YourStrongPassword123!
rename-command FLUSHALL ""
rename-command CONFIG ""
# 性能配置
maxclients 10000
slowlog-log-slower-than 10000
slowlog-max-len 128
# 日志
loglevel notice
logfile /var/log/redis/redis.log
7.2 持久化场景配置
# 基础配置
port 6379
bind 127.0.0.1
protected-mode yes
# 内存配置
maxmemory 8gb
maxmemory-policy volatile-lru
# RDB 持久化
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis
rdbcompression yes
rdbchecksum yes
# AOF 持久化
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-use-rdb-preamble yes
# 安全配置
requirepass YourStrongPassword123!
八、配置检查与优化
8.1 配置检查命令
# 检查配置
redis-cli CONFIG GET maxmemory
redis-cli CONFIG GET maxmemory-policy
redis-cli CONFIG GET appendonly
# 动态修改配置
redis-cli CONFIG SET maxmemory 4gb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
# 持久化配置修改
redis-cli CONFIG REWRITE
8.2 性能诊断
# 内存使用
redis-cli INFO memory
# 统计信息
redis-cli INFO stats
# 客户端信息
redis-cli CLIENT LIST
# 慢查询
redis-cli SLOWLOG GET 10
# 延迟测试
redis-cli --latency
redis-cli --latency-history
九、常见问题
Q1: 内存满了怎么办?
# 检查内存使用
redis-cli INFO memory
# 解决方式 1: 增加内存
CONFIG SET maxmemory 8gb
# 解决方式 2: 调整淘汰策略
CONFIG SET maxmemory-policy allkeys-lru
# 解决方式 3: 手动清理
redis-cli MEMORY DOCTOR # 内存诊断
Q2: AOF 文件过大?
# 触发 AOF 重写
redis-cli BGREWRITEAOF
# 检查 AOF 状态
redis-cli INFO persistence
Q3: 慢查询过多?
# 查看慢查询
redis-cli SLOWLOG GET 100
# 优化建议
# 1. 避免大键操作
# 2. 使用批量操作
# 3. 调整 slowlog-log-slower-than
CONFIG SET slowlog-log-slower-than 20000
总结
Redis 配置要点总结:
| 配置类别 | 关键配置 | 推荐值 |
|---|---|---|
| 内存 | maxmemory | 物理内存 70-80% |
| 淘汰策略 | maxmemory-policy | allkeys-lru |
| 持久化 | appendfsync | everysec |
| 安全 | requirepass | 强密码 |
| 网络 | tcp-keepalive | 60 |
| 慢查询 | slowlog-log-slower-than | 10000 |
最佳实践:
- 生产环境必须设置
maxmemory - 启用密码认证和访问控制
- 根据场景选择合适的持久化方式
- 定期检查和优化配置
- 监控慢查询和内存使用
合理配置 Redis,能让你的服务更稳定、更高效!