*Redis 配置文件详解
Redis 通过配置文件 redis.conf 管理所有运行时参数。Redis 提供了两种方式查看和修改配置:
- 编辑配置文件 — 修改
redis.conf后重启服务生效,适合持久化参数调整 - 运行时命令 — 使用 CONFIG GET / CONFIG SET 命令动态查询和修改,无需重启
*查看 Redis 配置
*查看指定配置项
127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"
*查看所有配置项
127.0.0.1:6379> CONFIG GET *
输出示例:

*修改 Redis 配置
*运行时动态修改
CONFIG SET 命令可立即生效,但重启后会丢失(除非同时写入 redis.conf):
127.0.0.1:6379> CONFIG SET loglevel "warning"
OK
127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "warning"

*持久化到配置文件
127.0.0.1:6379> CONFIG REWRITE
OK
CONFIG REWRITE 会将当前运行时的配置自动写回 redis.conf 文件,保留原有注释和格式。

*配置文件组织结构
一个完整的 redis.conf 通常按以下模块组织:
| 模块 | 说明 |
|---|---|
| 网络 | 端口、绑定地址、超时、TCP 参数 |
| 通用 | 守护进程、PID 文件、日志、数据库数量 |
| 快照 | RDB 持久化策略 |
| 复制 | 主从复制、哨兵相关参数 |
| 安全 | 密码、ACL、命令重命名 |
| 客户端 | 最大连接数、输出缓冲 |
| 内存管理 | 最大内存、淘汰策略 |
| AOF 持久化 | AOF 日志配置 |
| Lua 脚本 | 脚本超时、执行限制 |
| 集群 | Cluster 模式配置 |
| 慢查询 | 慢查询阈值、日志长度 |
| 事件通知 | Keyspace 通知 |
*核心配置参数详解
*网络与连接
| 参数 | 默认值 | 说明 |
|---|---|---|
| bind | 127.0.0.1 |
监听地址。生产建议绑定内网 IP,如 bind 192.168.1.10 127.0.0.1 |
| port | 6379 |
监听端口 |
| timeout | 0 |
客户端空闲超时(秒),0 不关闭。生产建议 300 |
| tcp-keepalive | 300 |
TCP 保活探测间隔(秒) |
| protected-mode | yes |
无密码且无 bind 时仅允许本地访问,防止暴露在公网 |
| maxclients | 10000 |
最大客户端连接数,受系统 ulimit -n 限制 |
*通用配置
| 参数 | 默认值 | 说明 |
|---|---|---|
| daemonize | no |
是否守护进程运行。生产设 yes |
| pidfile | /var/run/redis.pid |
PID 文件路径 |
| loglevel | notice |
日志级别:debug / verbose / notice(生产)/ warning |
| logfile | '' |
日志文件路径,空字符串表示标准输出 |
| databases | 16 |
数据库数量(0-15)。Cluster 模式下固定为 1 |
*RDB 持久化
| 参数 | 默认值 | 说明 |
|---|---|---|
| save | 3600 1 300 100 60 10000 |
触发 RDB 条件:秒数 更改次数。满足任一即执行 BGSAVE |
| stop-writes-on-bgsave-error | yes |
BGSAVE 失败时是否停止写入 |
| rdbcompression | yes |
RDB 是否 LZF 压缩 |
| rdbchecksum | yes |
RDB 末尾 CRC64 校验和 |
| dbfilename | dump.rdb |
RDB 文件名 |
| dir | ./ |
RDB/AOF 存放目录,建议独立数据盘 |
*AOF 持久化
| 参数 | 默认值 | 说明 |
|---|---|---|
| appendonly | no |
是否开启 AOF。生产强烈建议 yes |
| appendfilename | appendonly.aof |
AOF 文件名 |
| appendfsync | everysec |
同步策略:always(最安全最慢)、everysec(推荐)、no(最快最不安全) |
| no-appendfsync-on-rewrite | no |
AOF 重写时是否暂停 fsync |
| auto-aof-rewrite-percentage | 100 |
AOF 增长超过上次重写大小的百分比时触发重写 |
| auto-aof-rewrite-min-size | 64mb |
AOF 重写最小文件大小 |
| aof-load-truncated | yes |
AOF 末尾损坏时是否尽可能恢复 |
| aof-use-rdb-preamble | yes |
是否使用 RDB-AOF 混合持久化(Redis 4.0+) |
*内存管理
| 参数 | 默认值 | 说明 |
|---|---|---|
| maxmemory | 0 |
最大可用内存。生产必须设置,如 maxmemory 4gb |
| maxmemory-policy | noeviction |
内存满时的淘汰策略 |
| maxmemory-samples | 5 |
LRU/LFU 采样数量,越大越精确但 CPU 开销越高 |
| maxmemory-clients | 0 |
为客户端连接预留的内存上限(Redis 7.0+) |
淘汰策略对比:
| 策略 | 说明 | 适用场景 |
|---|---|---|
noeviction |
不淘汰,返回写错误 | 数据不可丢失 |
allkeys-lru |
所有 Key 中淘汰最近最少使用 | 纯缓存 |
allkeys-lfu |
所有 Key 中淘汰使用频率最低 | 热点差异大的缓存 |
volatile-lru |
仅在有过期时间的 Key 中 LRU 淘汰 | 部分数据需持久保留 |
volatile-ttl |
淘汰即将过期的 Key | 临时数据为主 |
allkeys-random |
随机淘汰 | 无明显访问规律 |
*复制 (Replication)
| 参数 | 默认值 | 说明 |
|---|---|---|
| replicaof / slaveof | — | 指定主节点 IP 和端口 |
| masterauth | — | 主节点密码 |
| requirepass | — | 本节点连接密码。Redis 6.0+ 建议用 ACL 替代 |
| replica-serve-stale-data | yes |
复制中断时从节点是否提供旧数据 |
| replica-read-only | yes |
从节点是否只读 |
| repl-diskless-sync | no |
无盘复制(直接网络传输 RDB) |
| repl-backlog-size | 1mb |
复制积压缓冲区,建议根据写入量调大 |
| min-replicas-to-write | 0 |
至少 N 个从节点在线才允许写入 |
| min-replicas-max-lag | 10 |
从节点延迟超过该秒数视为不在线 |
Redis 5.0+ 已将
slave参数统一更名为replica,旧名称仍兼容。
*集群 (Cluster)
| 参数 | 默认值 | 说明 |
|---|---|---|
| cluster-enabled | no |
是否启用 Cluster 模式 |
| cluster-config-file | nodes.conf |
集群节点配置文件,由 Redis 自动生成 |
| cluster-node-timeout | 15000 |
节点超时时间(毫秒) |
| cluster-require-full-coverage | yes |
部分哈希槽不可用时是否停止服务 |
| cluster-announce-ip | — | 对外公告 IP(NAT/容器环境必需) |
| cluster-announce-port | — | 对外公告端口 |
| cluster-announce-bus-port | — | 集群总线端口(默认 port + 10000) |
*安全配置 (Redis 6.0+ ACL)
| 参数 | 说明 |
|---|---|
| aclfile | ACL 规则文件路径,如 /etc/redis/users.acl |
| acl-pubsub-default | Pub/Sub 频道默认权限:allchannels 或 resetchannels |
ACL 配置示例:
# redis.conf 或 users.acl
user admin on >admin123 ~* &* +@all
user readonly on >read123 ~* +@read
user app on >app123 ~orders:* ~users:* +@write +@read -@admin
*客户端输出缓冲限制
防止客户端消费过慢导致内存暴涨:
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
*Lua 脚本限制
| 参数 | 默认值 | 说明 |
|---|---|---|
| lua-time-limit | 5000 |
Lua 脚本最大执行时间(毫秒),超时后可被 SCRIPT KILL 终止 |
*高级编码优化
| 参数 | 默认值 | 说明 |
|---|---|---|
| hash-max-ziplist-entries | 512 |
Hash 使用 ziplist 的最大条目数 |
| hash-max-ziplist-value | 64 |
Hash 使用 ziplist 的最大 value 长度(字节) |
| list-max-ziplist-size | -2 |
List 压缩列表最大深度 |
| set-max-intset-entries | 512 |
Set 使用 intset 的最大条目数 |
| zset-max-ziplist-entries | 128 |
ZSet 使用 ziplist 的最大条目数 |
| zset-max-ziplist-value | 64 |
ZSet 使用 ziplist 的最大 value 长度 |
| activerehashing | yes |
是否启用渐进式 rehash |
Redis 7.0+ 引入
listpack替代 ziplist,相关参数已更新为*-listpack-*。
*多线程 IO (Redis 6.0+)
| 参数 | 默认值 | 说明 |
|---|---|---|
| io-threads | 1 |
IO 线程数。设为 CPU 核数可提升性能 |
| io-threads-do-reads | no |
是否开启多线程读 |
多线程仅用于网络 IO 和协议解析,命令执行仍为单线程。
*生产环境推荐配置模板
# ========== 网络 ==========
bind 127.0.0.1 10.0.0.5
port 6379
protected-mode yes
tcp-keepalive 300
maxclients 10000
# ========== 通用 ==========
daemonize yes
pidfile /var/run/redis/redis-server.pid
loglevel notice
logfile /var/log/redis/redis-server.log
databases 16
# ========== RDB 持久化 ==========
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/redis
# ========== 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
aof-use-rdb-preamble yes
# ========== 内存管理 ==========
maxmemory 4gb
maxmemory-policy allkeys-lru
maxmemory-samples 5
# ========== 复制(从节点配置) ==========
# replicaof 10.0.0.1 6379
# masterauth your_password
replica-serve-stale-data yes
replica-read-only yes
repl-backlog-size 64mb
# ========== 安全 ==========
requirepass your_strong_password
# aclfile /etc/redis/users.acl
# ========== 客户端缓冲限制 ==========
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
# ========== 慢查询 ==========
slowlog-log-slower-than 10000
slowlog-max-len 128
# ========== 多线程 IO (Redis 6.0+) ==========
# io-threads 4
# io-threads-do-reads yes
*常见配置场景速查
| 场景 | 关键配置 |
|---|---|
| 纯缓存(可丢失) | maxmemory-policy allkeys-lru,关闭 AOF 或 appendfsync no |
| 数据库(不可丢失) | appendonly yes + appendfsync everysec + RDB 备份 |
| 高并发读 | 开启 io-threads,配置只读从节点 |
| 高并发写 | 关闭 rdbcompression 减少 CPU,增大 repl-backlog-size |
| 容器/NAT 部署 | 设置 cluster-announce-ip 和 replica-announce-ip |
| 公有云部署 | protected-mode yes + bind 内网 IP + requirepass / ACL |
*配置调试技巧
*查看运行配置
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "4294967296"
*查看服务器信息
127.0.0.1:6379> INFO server
# Server
redis_version:7.2.4
redis_mode:standalone
os:Linux 5.15.0
*查看内存使用
127.0.0.1:6379> INFO memory
# Memory
used_memory:1048576
used_memory_human:1.00M
maxmemory_human:4.00G
maxmemory_policy:allkeys-lru