Redis配置文件(redis.conf)
推荐配置:
配置分类 | 配置项 | 默认值/说明 | 推荐配置(通用) | 生产环境额外建议 | 适用场景 |
---|---|---|---|---|---|
连接与安全 | bind | 127.0.0.1 (仅本地连接) | 注释或 bind 0.0.0.0 (允许远程连接) | 生产环境指定具体客户端 IP(如 bind 10.0.0.5 ) | 所有需要远程连接的场景 |
protected-mode | yes (拒绝未授权远程连接) | protected-mode no | 必须配合 requirepass 使用 | 远程连接场景 | |
requirepass | 注释(无密码) | requirepass StrongPwd123! (复杂密码) | 定期更换密码,长度≥12位 | 所有环境(尤其生产) | |
maxclients | 10000 (最大连接数) | 中小型应用:5000 ;高并发:20000 | 根据服务器内存和 CPU 调整 | 限制恶意连接 | |
持久化 | appendonly (AOF) | no (关闭) | appendonly yes (开启 AOF) | 必须开启,避免数据丢失 | 所有需要数据持久化的场景 |
appendfsync | everysec (每秒同步) | 保持默认 everysec | 不建议用 always (性能差)或 no (风险高) | AOF 持久化优化 | |
save (RDB) | save 900 1 save 300 10 save 60 10000 | 保留默认或调整为 save 3600 1 (减少频率) | 作为 AOF 辅助,每日定时备份 RDB 文件 | 数据备份、快速恢复场景 | |
性能优化 | maxmemory | 注释(不限制内存) | 服务器内存的 50%-70%(如 8gb ) | 严格限制,避免 OOM 崩溃 | 所有环境(尤其生产) |
maxmemory-policy | noeviction (内存满时拒绝写操作) | allkeys-lru (删除最近最少使用的键) | 根据业务选择(如 volatile-lru 只删带过期键) | 内存有限的场景 | |
io-threads (6.0+) | 1 (单线程 IO) | CPU 核心数的 1/2(如 8核设 4 ) | 仅 Redis 6.0+ 生效,提升 IO 吞吐量 | 高并发读写场景 | |
集群专属 | cluster-enabled | no (非集群模式) | cluster-enabled yes | 集群环境必须开启 | Redis 集群 |
cluster-requirepass | 注释(无密码) | 与 requirepass 一致 | 集群内部通信密码,必须与客户端密码一致 | 集群安全验证 | |
cluster-announce-ip | 自动获取(可能为内网 IP) | 公网/宿主机 IP(如 189.1.240.145 ) | 容器部署时必须指定,避免内网 IP 暴露 | 容器化集群、远程访问集群 | |
cluster-node-timeout | 15000 (15秒超时) | 保持默认 15000 | 网络不稳定时可适当增大(如 30000 ) | 集群节点故障检测 |
#!/bin/bash# 1. 创建挂载目录(配置文件和数据存储)
mkdir -p /usr/local/redis/conf
mkdir -p /usr/local/redis/data# 2. 下载官方默认配置文件(若本地已有配置文件可跳过此步)
# 从Redis官方仓库下载6.0.8版本对应的配置文件
wget -O /usr/local/redis/conf/redis.conf https://raw.githubusercontent.com/redis/redis/6.0.8/redis.conf# 3. (可选)修改配置文件关键参数(根据需求调整)
# 允许远程连接(注释bind 127.0.0.1)
sed -i 's/bind 127.0.0.1/# bind 127.0.0.1/g' /usr/local/redis/conf/redis.conf
# 关闭保护模式
sed -i 's/protected-mode yes/protected-mode no/g' /usr/local/redis/conf/redis.conf
# 开启持久化(默认已开启,确认配置)
sed -i 's/appendonly no/appendonly yes/g' /usr/local/redis/conf/redis.conf
# 设置密码(可选,将your_password替换为实际密码)
# sed -i 's/# requirepass foobared/requirepass your_password/g' /usr/local/redis/conf/redis.conf# 4. 启动Redis容器(挂载外部配置和数据目录)
docker run -d \--name redis-6.0.8 \--restart always \--privileged=true \-p 6379:6379 \-v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf \-v /usr/local/redis/data:/data \redis:6.0.8 \redis-server /etc/redis/redis.conf# 5. 验证容器状态
echo "Redis容器启动状态:"
docker ps | grep redis-6.0.8# 6. 输出连接方式
echo "若启动成功,可通过以下命令连接:"
echo "docker exec -it redis-6.0.8 redis-cli"
# 若设置了密码,使用:docker exec -it redis-6.0.8 redis-cli -a your_password
Redis配置文件是控制Redis服务器行为的核心文件。通过修改配置文件,我们可以调整Redis的网络设置、内存管理、持久化策略、安全配置等各个方面。本文档将详细解释redis.conf中的主要配置项。
单位说明
在Redis配置文件中,当需要指定内存大小时,可以使用以下单位:
1k
=> 1000字节1kb
=> 1024字节1m
=> 1000000字节1mb
=> 1024*1024字节1g
=> 1000000000字节1gb
=> 102410241024字节
单位不区分大小写,1GB
、1Gb
、1gB
都是相同的。
1. 包含文件 (INCLUDES)
include /path/to/file.conf
功能说明: 包含其他配置文件。
使用场景:
- 当多个Redis服务器需要共享相同的基础配置,但又需要各自的特定配置时
- 便于配置文件的管理和维护
- 可以包含多个文件,也支持嵌套包含
注意事项:
include
指令不会被CONFIG REWRITE
命令重写- 建议将
include
放在配置文件开头,避免覆盖运行时的配置更改 - 如果要通过包含文件覆盖配置选项,应将
include
放在文件末尾
2. 模块 (MODULES)
loadmodule /path/to/module.so
功能说明: 在Redis启动时加载模块。
使用场景:
- 扩展Redis功能,如RedisJSON、RedisSearch等
- 添加自定义命令和数据结构
注意事项:
- 如果服务器无法加载指定的模块,将启动失败
- 可以使用多个
loadmodule
指令加载多个模块
3. 网络配置 (NETWORK)
bind 127.0.0.1 ::1
功能说明: 指定Redis监听的网络接口。
参数说明:
127.0.0.1
:IPv4本地回环地址::1
:IPv6本地回环地址
使用场景:
- 限制Redis只能从本地连接(默认配置)
- 配置为特定IP地址,允许远程连接
安全警告:
- 如果Redis服务器直接暴露在互联网上,绑定到所有接口是危险的
- 默认配置只允许本地连接,如需远程连接需要谨慎配置
protected-mode yes
功能说明: 启用保护模式。
保护模式条件:
当保护模式开启且满足以下条件时:
- 未使用
bind
指令明确绑定地址 - 未配置密码
Redis将只接受来自本地回环地址(127.0.0.1, ::1)和Unix域套接字的连接。
使用建议:
- 生产环境建议保持开启
- 只有在确定需要无认证远程连接时才关闭
port 6379
功能说明: 指定Redis监听的TCP端口。
默认值: 6379(IANA分配的Redis端口号)
特殊值:
port 0
:Redis将不监听TCP套接字
tcp-backlog 511
功能说明: 设置TCP监听队列的长度。
使用场景:
- 高并发环境下需要设置较大的值
- 避免慢客户端连接问题
注意事项:
- Linux内核会将其截断为
/proc/sys/net/core/somaxconn
的值 - 需要同时调整
somaxconn
和tcp_max_syn_backlog
才能达到预期效果
timeout 0
功能说明: 设置客户端空闲超时时间(秒)。
默认值: 0(禁用超时)
使用场景:
- 释放长时间空闲的客户端连接
- 防止连接数过多导致的资源耗尽
tcp-keepalive 300
功能说明: 设置TCP保活时间(秒)。
默认值: 300秒(Redis 3.2.1及以上版本)
作用:
- 检测死连接
- 从中间网络设备的角度保持连接活跃
注意事项:
- Linux上,指定的值是发送ACK的周期
- 关闭连接需要两倍的时间
- 其他内核的周期取决于内核配置
4. TLS/SSL配置
tls-port 6379
功能说明: 启用TLS/SSL并指定监听端口。
使用方法:
port 0 # 禁用非加密端口
tls-port 6379 # 启用TLS端口
tls-cert-file redis.crt
tls-key-file redis.key
功能说明: 配置用于服务器认证的X.509证书和私钥。
文件格式: PEM格式
tls-ca-cert-file ca.crt
tls-ca-cert-dir /etc/ssl/certs
功能说明: 配置用于认证客户端和对等节点的CA证书。
注意事项:
- Redis需要显式配置,不会隐式使用系统范围的配置
- 至少需要配置其中一个
5. 一般配置 (GENERAL)
daemonize no
功能说明: 设置Redis是否以守护进程模式运行。
默认值: no
行为:
yes
:Redis将在后台运行,并在/var/run/redis.pid
写入PID文件no
:Redis将在前台运行
supervised no
功能说明: 配置Redis与进程监控系统的交互方式。
可选值:
no
:不与监控系统交互upstart
:通过将Redis置于SIGSTOP模式向upstart发送信号systemd
:通过向$NOTIFY_SOCKET
写入READY=1向systemd发送信号auto
:根据环境变量自动检测
pidfile /var/run/redis_6379.pid
功能说明: 指定PID文件的路径。
注意事项:
- 守护进程模式下,即使未指定也会使用默认路径
- 非守护进程模式下,只有指定时才会创建PID文件
loglevel notice
功能说明: 设置日志级别。
可选值:
debug
:详细信息,用于开发/测试verbose
:较多信息,但不像debug那样混乱notice
:中等详细程度,生产环境推荐warning
:只记录重要/关键消息
logfile ""
功能说明: 指定日志文件名称。
特殊值:
- 空字符串:Redis将日志输出到标准输出
- 守护进程模式下,如果使用标准输出,日志将发送到
/dev/null
databases 16
功能说明: 设置数据库的数量。
默认值: 16个数据库
使用方法:
- 默认使用DB 0
- 可以使用
SELECT <dbid>
命令切换数据库(dbid范围:0到databases-1)
6. 快照配置 (SNAPSHOTTING)
save 900 1
save 300 10
save 60 10000
功能说明: 配置自动保存快照的条件。
语法: save <seconds> <changes>
默认配置含义:
save 900 1
:15分钟内至少1个key发生变化save 300 10
:5分钟内至少10个key发生变化save 60 10000
:1分钟内至少10000个key发生变化
禁用方法:
save "" # 禁用所有自动保存
stop-writes-on-bgsave-error yes
功能说明: 当RDB快照保存失败时是否停止接受写入操作。
默认值: yes
行为:
yes
:强制用户注意数据没有正确持久化到磁盘no
:即使有磁盘问题,Redis也会继续正常工作
rdbcompression yes
功能说明: 是否使用LZF压缩字符串对象。
默认值: yes
权衡:
yes
:节省磁盘空间,但消耗更多CPUno
:节省CPU,但数据集可能更大
rdbchecksum yes
功能说明: 是否在RDB文件末尾放置CRC64校验和。
默认值: yes
权衡:
yes
:提高数据完整性,但保存和加载时会有10%左右的性能损耗no
:提高性能,但失去数据完整性检查
dbfilename dump.rdb
功能说明: 指定RDB快照文件的名称。
dir ./
功能说明: 指定工作目录。
作用:
- RDB文件将写入此目录
- AOF文件也将在此目录创建
- 必须指定目录,不能是文件名
7. 复制配置 (REPLICATION)
replicaof <masterip> <masterport>
功能说明: 配置当前Redis实例为指定主服务器的从服务器。
使用方法:
replicaof 192.168.1.100 6379
masterauth <master-password>
功能说明: 当主服务器有密码保护时,从服务器使用此密码进行认证。
masteruser <username>
功能说明: Redis 6.0及以上版本,配置用于复制的ACL用户名。
replica-serve-stale-data yes
功能说明: 当从服务器与主服务器失去连接或复制正在进行时的行为。
可选值:
yes
:继续响应用户请求,可能返回过期数据no
:除特定命令外,对所有命令返回错误"SYNC with master in progress"
replica-read-only yes
功能说明: 设置从服务器是否为只读模式。
默认值: yes(Redis 2.6及以上版本)
注意事项:
- 只读从服务器仍可执行管理命令
- 可以使用
rename-command
隐藏危险命令提高安全性
repl-diskless-sync no
功能说明: 配置复制同步策略。
可选值:
no
:基于磁盘的复制(默认)yes
:无盘复制
无盘复制优势:
- 避免磁盘I/O瓶颈
- 适合慢速磁盘和快速网络环境
repl-backlog-size 1mb
功能说明: 设置复制积压缓冲区的大小。
作用:
- 当从服务器断开连接后,积压缓冲区保存主服务器的写命令
- 从服务器重新连接时,可以只同步缺失的部分数据
大小选择:
- 越大,从服务器可以断开连接的时间越长
- 只在有至少一个从服务器连接时分配
8. 安全配置 (SECURITY)
requirepass foobared
功能说明: 设置Redis访问密码。
注意事项:
- Redis 6.0及以上版本中,这只是ACL系统的兼容层
- 实际上是为默认用户设置密码
- 客户端仍可使用
AUTH <password>
或AUTH default <password>
认证
安全警告:
- Redis速度很快,外部用户每秒可以尝试约100万个密码
- 必须使用非常强的密码
- 密码应该是客户端和服务器之间的共享密钥,不需要人记忆
ACL用户配置
Redis 6.0及以上版本支持ACL(访问控制列表):
user <username> ... acl rules ...
示例:
user worker +@list +@connection ~jobs:* on >ffa9203c493aa99
ACL规则说明:
on/off
:启用/禁用用户+<command>
:允许执行命令-<command>
:禁止执行命令+@<category>
:允许执行命令类别中的所有命令~<pattern>
:允许访问的key模式><password>
:添加密码nopass
:无需密码resetpass
:重置密码reset
:重置用户配置
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
功能说明: 重命名危险命令。
完全禁用命令:
rename-command CONFIG ""
注意事项:
- 不建议使用此选项,推荐使用ACL
- 重命名记录到AOF文件或传输到从服务器的命令可能导致问题
9. 客户端配置 (CLIENTS)
maxclients 10000
功能说明: 设置同时连接的最大客户端数。
默认值: 10000
注意事项:
- 如果Redis无法配置进程文件限制以允许指定的限制,最大值将设置为当前文件限制减32
- Redis集群中,连接数也与集群总线共享
- 每个集群节点使用两个连接(一个传入,一个传出)
10. 内存管理 (MEMORY MANAGEMENT)
maxmemory <bytes>
功能说明: 设置Redis使用的最大内存量。
使用场景:
- 作为LRU或LFU缓存使用
- 为实例设置硬内存限制
注意事项:
- 当达到内存限制时,Redis将根据
maxmemory-policy
选择要删除的键 - 如果无法根据策略删除键,Redis将对写命令返回错误
maxmemory-policy noeviction
功能说明: 设置内存达到限制时的淘汰策略。
可选策略:
- volatile-lru:使用LRU算法淘汰设置了过期时间的键
- allkeys-lru:使用LRU算法淘汰任何键
- volatile-lfu:使用LFU算法淘汰设置了过期时间的键
- allkeys-lfu:使用LFU算法淘汰任何键
- volatile-random:随机淘汰设置了过期时间的键
- allkeys-random:随机淘汰任何键
- volatile-ttl:淘汰TTL最小的键
- noeviction:不淘汰任何键,对写命令返回错误(默认)
算法说明:
- LRU:最近最少使用(Least Recently Used)
- LFU:最不经常使用(Least Frequently Used)
maxmemory-samples 5
功能说明: 设置LRU、LFU和TTL算法的样本大小。
默认值: 5
权衡:
- 10:非常接近真实LRU,但CPU消耗更多
- 5:默认值,产生足够好的结果
- 3:更快但准确性较低
11. 延迟释放 (LAZY FREEING)
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
功能说明: 配置Redis在不同场景下使用延迟释放(非阻塞删除)。
场景说明:
lazyfree-lazy-eviction
:内存淘汰时lazyfree-lazy-expire
:键过期时lazyfree-lazy-server-del
:服务器端删除时replica-lazy-flush
:从服务器执行全量同步时lazyfree-lazy-user-del
:用户执行DEL命令时
优势:
- 避免长时间阻塞
- 提高系统响应性
注意事项:
- 可能导致内存使用暂时增加
- 需要平衡内存使用和阻塞时间
12. 线程化I/O (THREADED I/O)
io-threads 4
功能说明: 启用线程化I/O并设置线程数。
默认值: 1(使用主线程)
使用建议:
- 至少4核CPU才建议启用
- 建议保留至少一个空闲核心
- 超过8个线程不太可能有更多帮助
- 4核机器建议使用2-3个I/O线程
- 8核机器建议使用6个线程
io-threads-do-reads no
功能说明: 是否使用线程处理读操作和协议解析。
默认值: no
注意事项:
- 通常线程化读操作帮助不大
- 此配置不能在运行时通过
CONFIG SET
更改 - SSL启用时此功能不工作
13. 追加模式 (APPEND ONLY MODE)
appendonly no
功能说明: 启用AOF(Append Only File)持久化模式。
默认值: no(使用RDB模式)
AOF优势:
- 更好的持久性保证
- 可以只丢失1秒的写入(默认配置)
- 甚至可以只丢失一个写入
appendfilename "appendonly.aof"
功能说明: 指定AOF文件名。
appendfsync everysec
功能说明: 设置AOF文件的fsync策略。
可选值:
-
no:不主动fsync,让操作系统决定何时刷新数据
- 性能最好
- 数据安全性最差
-
always:每个写入命令后都fsync
- 性能最差
- 数据安全性最好
-
everysec:每秒fsync一次(默认)
- 性能和安全性的折中
- 推荐的生产环境配置
no-appendfsync-on-rewrite no
功能说明: 在BGSAVE或BGREWRITEAOF期间是否禁用主进程的fsync。
默认值: no
权衡:
yes
:提高性能,但可能丢失最多30秒的日志no
:保持数据安全,但可能导致阻塞
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
功能说明: 配置AOF文件自动重写的条件。
工作原理:
- Redis记住上次重写后的AOF文件大小
- 当当前大小超过指定百分比且达到最小大小时触发重写
- 百分比设为0可禁用自动重写
aof-use-rdb-preamble yes
功能说明: 重写AOF文件时使用RDB前缀。
默认值: yes(Redis 4.0及以上版本)
优势:
- 更快的重写和恢复
- 更小的文件大小
14. Lua脚本 (LUA SCRIPTING)
lua-time-limit 5000
功能说明: 设置Lua脚本的最大执行时间(毫秒)。
默认值: 5000毫秒(5秒)
超过限制的行为:
- Redis会记录日志
- 对查询返回错误
- 只有
SCRIPT KILL
和SHUTDOWN NOSAVE
命令可用
特殊值:
- 0或负值:无限制执行,不警告
15. Redis集群 (REDIS CLUSTER)
cluster-enabled yes
功能说明: 启用Redis集群模式。
默认值: no
cluster-config-file nodes-6379.conf
功能说明: 指定集群配置文件名。
注意事项:
- 不应手动编辑此文件
- 由Redis节点自动创建和更新
- 每个集群节点需要不同的配置文件名
cluster-node-timeout 15000
功能说明: 设置集群节点超时时间(毫秒)。
默认值: 15000毫秒(15秒)
作用:
- 节点不可达的时间阈值
- 其他内部时间限制是此值的倍数
cluster-replica-validity-factor 10
功能说明: 设置从节点数据有效性因子。
默认值: 10
计算公式:
max_time = (node-timeout * replica-validity-factor) + repl-ping-replica-period
特殊值:
- 0:从节点总是尝试故障转移,不管数据多旧
cluster-migration-barrier 1
功能说明: 设置从节点迁移的屏障。
默认值: 1
作用:
- 控制从节点何时迁移到孤儿主节点
- 确保主节点至少保留指定数量的从节点
16. 慢查询日志 (SLOW LOG)
slowlog-log-slower-than 10000
功能说明: 设置慢查询日志的时间阈值(微秒)。
默认值: 10000微秒(10毫秒)
特殊值:
- 负值:禁用慢查询日志
- 0:记录所有命令
slowlog-max-len 128
功能说明: 设置慢查询日志的最大长度。
默认值: 128
注意事项:
- 没有长度限制
- 会消耗内存
- 可以使用
SLOWLOG RESET
回收内存
17. 延迟监控 (LATENCY MONITOR)
latency-monitor-threshold 0
功能说明: 设置延迟监控的阈值(毫秒)。
默认值: 0(禁用延迟监控)
使用场景:
- 诊断Redis性能问题
- 识别延迟来源
注意事项:
- 启用会有性能影响
- 建议只在有延迟问题时启用
- 可以在运行时使用
CONFIG SET
启用
18. 事件通知 (EVENT NOTIFICATION)
notify-keyspace-events ""
功能说明: 配置Redis的事件通知。
默认值: 空字符串(禁用通知)
事件类别:
字符 | 含义 |
---|---|
K | Keyspace事件,使用__keyspace@<db>__ 前缀 |
E | Keyevent事件,使用__keyevent@<db>__ 前缀 |
g | 通用命令(DEL、EXPIRE、RENAME等) |
$ | 字符串命令 |
l | 列表命令 |
s | 集合命令 |
h | 哈希命令 |
z | 有序集合命令 |
x | 过期事件 |
e | 淘汰事件 |
t | 流命令 |
m | 键缺失事件 |
A | g$lshzxet的别名(所有事件除了m) |
示例配置:
notify-keyspace-events Elg # 启用列表和通用事件
notify-keyspace-events Ex # 启用过期事件
19. 高级配置 (ADVANCED CONFIG)
数据结构优化配置
# 哈希编码优化
hash-max-ziplist-entries 512
hash-max-ziplist-value 64# 列表编码优化
list-max-ziplist-size -2 # -2表示8KB
list-compress-depth 0 # 0表示禁用压缩# 集合编码优化
set-max-intset-entries 512# 有序集合编码优化
zset-max-ziplist-entries 128
zset-max-ziplist-value 64# HyperLogLog优化
hll-sparse-max-bytes 3000# 流优化
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
功能说明: 启用主动重哈希。
默认值: yes
作用:
- 每100毫秒使用1毫秒CPU时间帮助重哈希
- 释放内存
- 提高哈希表效率
hz 10
功能说明: 设置Redis后台任务的频率。
默认值: 10
范围: 1-500
权衡:
- 提高值会增加空闲时的CPU使用
- 但会使Redis在有许多过期键时更响应
- 超过100的值通常不是好主意
dynamic-hz yes
功能说明: 启用动态HZ值。
默认值: yes
作用:
- 根据连接的客户端数量动态调整HZ值
- 空闲实例使用很少的CPU时间
- 繁忙实例更响应
20. 主动碎片整理 (ACTIVE DEFRAGMENTATION)
activedefrag no
功能说明: 启用主动碎片整理。
默认值: no
注意事项:
- 只在使用Redis自带的Jemalloc时工作
- Linux构建默认使用Jemalloc
- 只在有碎片问题时启用
碎片整理阈值配置
active-defrag-ignore-bytes 100mb # 最小碎片浪费量
active-defrag-threshold-lower 10 # 启动碎片整理的最小碎片百分比
active-defrag-threshold-upper 100 # 使用最大努力的碎片百分比
active-defrag-cycle-min 1 # 最小CPU百分比
active-defrag-cycle-max 25 # 最大CPU百分比
总结
Redis配置文件提供了丰富的选项来优化Redis服务器的性能、安全性和可靠性。在实际使用中,需要根据具体的应用场景和工作负载来调整这些配置。
重要建议:
-
生产环境配置:
- 启用密码认证
- 配置适当的持久化策略
- 设置合理的内存限制和淘汰策略
- 启用慢查询日志以便性能分析
-
性能优化:
- 根据CPU核心数调整线程数
- 合理设置内存策略
- 优化数据结构配置
- 监控并处理碎片问题
-
安全考虑:
- 不要将Redis直接暴露在互联网上
- 使用强密码
- 考虑使用ACL进行更精细的访问控制
- 定期备份数据
-
监控和维护:
- 启用适当的日志级别
- 配置慢查询日志
- 监控内存使用和碎片率
- 定期检查配置的有效性
通过合理配置这些选项,Redis可以在各种场景下提供出色的性能和可靠性。