Redis的常用配置详解
Redis 的配置文件(redis.conf)包含大量可优化参数,合理配置能显著提升性能、稳定性及安全性。以下从多个维度详解常用配置项:
一、基础配置
1. 服务基本信息
- port
- 作用:指定 Redis 监听的端口号,默认 6379。
- 示例:port 6379
- 场景:生产环境可修改为非默认端口,降低被扫描风险。
- bind
- 作用:指定 Redis 绑定的 IP 地址,默认 127.0.0.1(仅本地访问)。
- 示例:bind 192.168.1.100 或 bind 0.0.0.0(允许所有 IP 访问,需配合防火墙)。
- 注意:生产环境严禁直接绑定 0.0.0.0 且无密码,否则存在安全隐患。
- daemonize
- 作用:是否以守护进程模式运行,默认 no(前台运行)。
- 示例:daemonize yes(生产环境必须设为 yes)。
- 关联配置:pidfile /var/run/redis_6379.pid(守护进程的 PID 文件路径)。
- logfile
- 作用:日志文件路径,默认 ""(输出到标准输出)。
- 示例:logfile "/var/log/redis/redis.log"
- 建议:生产环境配置独立日志文件,便于故障排查。
2. 通用运行参数
- loglevel
- 作用:日志级别,可选 debug、verbose、notice、warning(默认)。
- 示例:loglevel warning
- 说明:开发环境可用 debug,生产环境建议 warning 以减少日志量。
- database
- 作用:默认数据库数量,默认 16(索引 0-15)。
- 示例:database 8
- 注意:Redis 6.0 后推荐使用命名空间(KEYSPACE)替代多数据库。
二、内存管理配置
1. 内存限制
- maxmemory
- 作用:设置 Redis 最大可用内存,单位支持 bytes、mb、gb(如 1gb)。
- 示例:maxmemory 512mb
- 说明:超过此限制时,按 maxmemory-policy 策略淘汰数据。
2. 内存淘汰策略
- maxmemory-policy
- 作用:当内存不足时的淘汰策略,常用选项:
- volatile-lru:在设置过期时间的键中,淘汰最近最少使用(LRU)的键。
- allkeys-lru:在所有键中淘汰 LRU 键(推荐生产环境使用)。
- volatile-random:随机淘汰过期键。
- allkeys-random:随机淘汰任意键。
- volatile-ttl:淘汰剩余过期时间最短的键。
- noeviction:不淘汰数据,写入操作会报错(默认策略)。
- 示例:maxmemory-policy allkeys-lru
- 建议:根据业务场景选择,如缓存场景优先 allkeys-lru。
3. 内存碎片优化
- activerehashing
- 作用:是否开启主动哈希重哈希,默认 yes。
- 说明:当哈希表负载过高时,自动扩容并重新哈希,提升查询效率,但会消耗 CPU。
三、持久化配置
Redis 支持两种持久化方式:RDB(快照)和 AOF(日志追加),可单独或同时启用。
1. RDB 配置(默认启用)
- save
- 作用:设置快照触发条件,格式为 save <seconds> <changes>(多少秒内至少 changes 次写操作则生成快照)。
- 默认配置:
save 900 1 # 900秒内至少1次写操作
save 300 10 # 300秒内至少10次写操作
save 60 10000 # 60秒内至少10000次写操作
- 示例:save 60 500(60秒内500次写操作触发快照)
- 注意:频繁触发会影响性能,建议根据业务写入频率调整。
- dbfilename
- 作用:RDB 文件名,默认 dump.rdb。
- 示例:dbfilename "redis.rdb"
- dir
- 作用:RDB 和 AOF 文件存储目录,默认 ./(启动目录)。
- 示例:dir "/data/redis/"
- 建议:配置独立磁盘分区,避免与系统盘竞争 IO。
2. AOF 配置(默认关闭,需手动开启)
- appendonly
- 作用:是否启用 AOF 持久化,默认 no。
- 示例:appendonly yes
- appendfsync
- 作用:AOF 日志写入磁盘的策略,可选:
- always:每次写操作都同步到磁盘(数据安全性最高,性能最低)。
- everysec:每秒同步一次(默认,兼顾性能和安全性)。
- no:由操作系统决定同步时机(性能最高,数据丢失风险最大)。
- 示例:appendfsync everysec
- aof重写配置
- auto-aof-rewrite-percentage 100:当 AOF 文件大小比上次重写后增长 100% 时触发重写。
- auto-aof-rewrite-min-size 64mb:AOF 文件至少 64MB 才触发重写。
- 说明:重写可压缩 AOF 文件,避免日志无限增长。
3. RDB 与 AOF 对比
特性 | RDB | AOF |
数据安全性 | 可能丢失最后一次快照后的数据 | 取决于 appendfsync 策略 |
恢复速度 | 快(直接加载二进制文件) | 慢(重放所有写命令) |
文件大小 | 小(压缩二进制) | 大(文本日志,可重写压缩) |
推荐场景 | 缓存、允许少量数据丢失场景 | 金融、支付等强数据安全场景 |
四、网络与安全配置
1. 网络连接
- tcp-backlog
- 作用:TCP 监听队列长度,默认 511,高并发场景可增大至 1024。
- 示例:tcp-backlog 1024
- tcp-keepalive
- 作用:客户端空闲连接的保活时间(秒),默认 0(不启用)。
- 示例:tcp-keepalive 300(5分钟无活动则断开连接)
- 用途:释放闲置连接,减少资源占用。
2. 安全认证
- requirepass
- 作用:设置访问密码,默认无密码。
- 示例:requirepass "your_strong_password"
- 注意:生产环境必须设置密码,且避免使用弱密码。
- aclfile
- 作用:ACL(访问控制列表)规则文件路径,Redis 6.0+ 推荐使用。
- 示例:aclfile "acl规则.txt"
- 说明:可精细控制用户对命令、键空间的访问权限,替代传统 requirepass。
五、集群与高可用配置
1. 哨兵模式(Sentinel)
- sentinel monitor <master-name> <ip> <port> <quorum>
- 示例:sentinel monitor mymaster 192.168.1.100 6379 2
- 说明:哨兵监控主节点,quorum 表示至少 2 个哨兵认为主节点下线才触发故障转移。
2. 集群模式(Cluster)
- cluster-enabled yes
- 作用:启用集群模式,默认 no。
- 关联配置:
- cluster-config-file nodes-6379.conf:集群节点配置文件(自动生成)。
- cluster-node-timeout 15000:节点超时时间(毫秒)。
- cluster-require-full-coverage yes:是否要求集群全节点覆盖,默认 yes(否则拒绝写入)。
六、其他性能优化配置
1. 客户端缓冲区限制
- client-output-buffer-limit
- 作用:限制客户端输出缓冲区大小,防止慢客户端拖垮服务器。
- 格式:client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
- 示例:
plaintext
client-output-buffer-limit normal 0 0 0 # 普通客户端不限制
client-output-buffer-limit slave 256mb 64mb 60 # 从节点缓冲区:硬限制256MB,软限制64MB(超过60秒触发限制)
client-output-buffer-limit pubsub 32mb 8mb 60 # 订阅客户端缓冲区限制
2. 慢查询日志
- slowlog-log-slower-than
- 作用:记录执行时间超过指定阈值(毫秒)的命令,默认 10000(10毫秒)。
- 示例:slowlog-log-slower-than 5000(记录超过5毫秒的命令)
- 关联配置:slowlog-max-len 1000(慢日志最大保存数量)。
3. 事务与脚本
- transaction-visibility
- 作用:Redis 6.0+ 新增,控制事务可见性,默认 on(开启)。
- lua-time-limit
- 作用:Lua 脚本执行超时时间(毫秒),默认 5000,超时会阻塞服务器。
七、配置加载与动态修改
1. 启动时加载配置
- 命令:redis-server /path/to/redis.conf
2. 动态修改配置
- 命令:CONFIG SET <parameter> <value>(部分配置立即生效,如 loglevel,部分需重启,如 port)。
- 示例:CONFIG SET maxmemory 1gb
3. 查看当前配置
- 命令:CONFIG GET *(获取所有配置)或 CONFIG GET <parameter>
八、生产环境最佳实践
1. 内存与淘汰
- 设 maxmemory 为物理内存的 60%-70%,避免 OOM。
- 优先使用 allkeys-lru 淘汰策略。
2. 持久化
- 重要数据同时开启 RDB 和 AOF,appendfsync 设为 everysec。
- 定期备份 RDB 文件到远程存储。
3. 安全
- 禁用公网访问,或绑定内网 IP + 强密码 + ACL。
- 升级到 Redis 6.0+,使用 ACL 替代简单密码。
4. 监控
- 配置慢查询日志,监控内存使用率、CPU 负载、连接数等指标。