*Redis 配置文件详解

Redis 通过配置文件 redis.conf 管理所有运行时参数。Redis 提供了两种方式查看和修改配置:

  1. 编辑配置文件 — 修改 redis.conf 后重启服务生效,适合持久化参数调整
  2. 运行时命令 — 使用 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配置1


*修改 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"

Redis配置2

*持久化到配置文件

127.0.0.1:6379> CONFIG REWRITE
OK

CONFIG REWRITE 会将当前运行时的配置自动写回 redis.conf 文件,保留原有注释和格式。

Redis配置3


*配置文件组织结构

一个完整的 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 频道默认权限:allchannelsresetchannels

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-ipreplica-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