redis 生产环境配置详解
在实际生产环境中,为了保障 redis 的稳定性和高性能,我们往往需要对默认配置进行一系列优化。本篇博文将以一份经过优化的 redis 配置文件为例,从基础网络设置、持久化、复制、内存管理、aof 持久化、性能调优以及监控限制等多个方面进行详细讲解。
下面给出的是一份示例配置文件,并附上详细注释说明:
配置文件示例
##################### # redis 配置优化文件 # 适用于生产环境 ##################### # 绑定地址,允许所有 ip 访问,生产环境建议改为内网 ip bind 192.168.1.1 # 保护模式,建议开启 (yes) 以增强安全性 protected-mode yes # 监听端口 port 6379 # tcp 连接队列大小 tcp-backlog 511 # 连接超时时间(0 代表不超时) timeout 0 # tcp 保活时间(秒),建议设大一些,避免连接被防火墙误断开 tcp-keepalive 300 # 后台运行 daemonize yes # 进程 pid 文件路径 pidfile /data/redis/redis_6379.pid # 日志级别 (debug | verbose | notice | warning) loglevel notice # 日志文件路径(空值表示输出到标准输出) logfile "/data/app/redis/logs/redis-server.log" # 数据库数量(默认16个,视业务需求调整) databases 16 # 显示 redis 启动 logo(关闭可减少日志干扰) always-show-logo no
基础网络与进程管理
bind 与 protected-mode配置文件中指定了
bind 192.168.1.1
,仅允许该 ip 访问 redis 服务。对于生产环境,建议使用内网 ip 限制访问范围。同时开启protected-mode
(保护模式),可以防止未经授权的访问。端口与连接设置使用
port 6379
设定 redis 监听端口,tcp-backlog
则设定了连接队列的长度。timeout 0
表示不自动断开空闲连接,而tcp-keepalive 300
保持长连接的活性,避免中间设备(如防火墙)因空闲超时断开连接。后台运行与日志记录通过
daemonize yes
使 redis 后台运行,同时定义了 pid 文件路径(pidfile
)以及日志文件路径和日志级别。这些设置有助于管理进程和问题排查。
rdb 持久化配置
redis 提供 rdb 持久化方式,可以定时保存内存数据到磁盘。配置文件中针对 rdb 做了如下优化:
##################### # rdb 持久化 ##################### # rdb 失败时阻止写入,避免数据损坏 stop-writes-on-bgsave-error yes # 启用 rdb 数据压缩 rdbcompression yes # 启用 rdb 数据校验 rdbchecksum yes # rdb 文件名 dbfilename dump.rdb # 关闭 rdb 删除同步文件,防止误删除 rdb-del-sync-files no # rdb 文件存储目录,建议设为 ssd 盘 dir /data/app/redis/data/
数据完整性保护使用
stop-writes-on-bgsave-error yes
,一旦 rdb 持久化出现错误,则停止写入操作,防止数据不一致。数据压缩和校验开启
rdbcompression
和rdbchecksum
可有效减小 rdb 文件体积,并通过校验保证数据完整性。文件存储目录将 rdb 文件存储在
/data/app/redis/data/
,建议部署在 ssd 上以获得更高的 i/o 性能。
复制(主从同步)设置
在高可用架构中,主从复制是常用手段。配置文件中针对复制功能作了如下设置:
##################### # 复制(主从同步) ##################### # 允许副本在断开主库时仍然提供只读服务 replica-serve-stale-data yes # 副本节点只读模式 replica-read-only yes # 关闭无磁盘同步(默认使用磁盘同步) repl-diskless-sync no # 无磁盘同步的延迟 repl-diskless-sync-delay 5 # 关闭无磁盘加载 repl-diskless-load disabled # 保持默认 tcp nodelay 配置 repl-disable-tcp-nodelay no # 副本优先级(越小越容易成为主库) replica-priority 100
副本服务可用性
replica-serve-stale-data yes
允许当副本与主库断开时继续提供只读服务,保证业务不中断。同步方式默认采用磁盘同步,通过调整
repl-diskless-sync-delay
来控制延迟,保持数据传输的稳定性。选主策略配置
replica-priority
,数值越低的副本在主库故障时更容易被选举为新的主库。
内存管理
内存管理是 redis 性能的核心部分,配置文件中提供了灵活的内存管理策略:
##################### # 内存管理 ##################### # 默认不限制内存,可根据业务需求调整 maxmemory 0 # 不驱逐数据,可改为 allkeys-lru maxmemory-policy noeviction # 关闭惰性删除,避免额外 cpu 开销 lazyfree-lazy-eviction no # 关闭惰性过期 lazyfree-lazy-expire no # 关闭惰性删除 lazyfree-lazy-server-del no # 关闭副本惰性清理 replica-lazy-flush no # 关闭 oom 调整 oom-score-adj no # 仅在 oom 保护时启用 oom-score-adj-values 0 200 800
内存限制与策略
maxmemory 0
表示默认无限制内存,适用于内存资源充足的环境;同时设置maxmemory-policy noeviction
,表示在内存达到上限时不驱逐数据。实际生产中,可以根据业务需求选用如allkeys-lru
等驱逐策略。惰性删除关闭各种惰性删除功能(lazyfree-* 配置)可以减少 cpu 额外开销,不过可能会使删除操作较为同步执行,需根据业务场景权衡。
aof 持久化
aof(append only file)是 redis 的另一种持久化方案,能提供更高的数据安全性。配置文件中对 aof 进行如下设置:
##################### # aof 持久化 ##################### # 启用 aof 持久化 appendonly yes # aof 文件名 appendfilename "appendonly.aof" # 每秒同步一次,性能和安全的折中方案 appendfsync everysec # 重写时是否关闭同步 no-appendfsync-on-rewrite no # 触发 aof 重写的比例 auto-aof-rewrite-percentage 100 # 触发 aof 重写的最小大小 auto-aof-rewrite-min-size 64mb # 允许加载截断的 aof aof-load-truncated yes # aof 兼容 rdb 头部,减少重启时间 aof-use-rdb-preamble yes
数据安全与性能开启
appendonly yes
并使用appendfsync everysec
,在数据安全和性能之间取得平衡;每秒同步一次 aof 文件可以大幅降低数据丢失风险。自动重写配置
auto-aof-rewrite-percentage
和auto-aof-rewrite-min-size
,确保 aof 文件不会无限制增大,同时利用增量重写减少重写期间的性能损耗。兼容性与恢复启用
aof-use-rdb-preamble
可以在重启时利用 rdb 头部数据加快加载速度,提升恢复效率。
性能优化设置
为了在高并发环境中获得更好的响应速度,redis 在配置文件中还做了一系列性能调优:
##################### # 性能优化 ##################### # 调高 hz 频率,提高响应速度 hz 50 # 动态调整 hz dynamic-hz yes # aof 重写时增量同步 aof-rewrite-incremental-fsync yes # rdb 保存时增量同步 rdb-save-incremental-fsync yes # 启用 jemalloc 线程优化内存管理 jemalloc-bg-thread yes
hz 频率默认的事件处理频率(hz)被调高到 50 次/秒,并启用动态调整,确保在负载波动时依然能够快速响应客户端请求。
增量同步针对 aof 重写和 rdb 保存启用增量同步,能有效减少磁盘 i/o 的压力,提高整体性能。
内存分配优化启用 jemalloc 的后台线程(
jemalloc-bg-thread yes
)进一步优化内存分配和释放,适用于高并发场景。
限制与监控
为了及时发现问题并防止意外情况发生,redis 提供了一系列监控和限制设置:
##################### # 限制与监控 ##################### # 慢查询阈值(微秒) slowlog-log-slower-than 10000 # 慢查询日志最大条数 slowlog-max-len 128 # 关闭延迟监控 latency-monitor-threshold 0 # 关闭 key 事件通知 notify-keyspace-events "" # 普通客户端无限制 client-output-buffer-limit normal 0 0 0 # 副本节点限制 client-output-buffer-limit replica 256mb 64mb 60 # pubsub 限制 client-output-buffer-limit pubsub 32mb 8mb 60
慢查询日志通过设置
slowlog-log-slower-than 10000
(单位为微秒)来记录执行时间超过 10 毫秒的命令,有助于定位性能瓶颈。客户端输出缓冲区分别对普通客户端、复制节点和 pubsub 模块设定了缓冲区大小限制,防止异常情况(如客户端阻塞)导致内存暴涨。
其他参数
最后,配置文件中还定义了一些额外参数,例如 rdb 保存条件和 tcp 相关参数,以进一步细化 redis 的行为:
##################### # 其他参数 ##################### # rdb 触发条件 save 900 1 300 10 60 10000 # tcp 连接队列大小 tcp-backlog 511 # tcp 保活时间(秒) tcp-keepalive 300
这些参数能根据具体业务场景对数据保存频率、网络连接队列等进行微调,从而达到性能和可靠性之间的平衡。
完整配置
######################################### # redis 配置优化文件 # 适用于生产环境 ######################################### # 绑定地址,允许所有 ip 访问,生产环境建议改为内网 ip bind 192.168.1.1 # 保护模式,建议开启 (yes) 以增强安全性 protected-mode yes # 监听端口 port 6379 # tcp 连接队列大小 tcp-backlog 511 # 连接超时时间(0 代表不超时) timeout 0 # tcp 保活时间(秒),建议设大一些,避免连接被防火墙误断开 tcp-keepalive 300 # 后台运行 daemonize yes # 进程 pid 文件路径 pidfile /data/app/redis/redis_6379.pid # 日志级别 (debug | verbose | notice | warning) loglevel notice # 日志文件路径(空值表示输出到标准输出) logfile "/data/redis/logs/redis-server.log" # 数据库数量(默认16个,视业务需求调整) databases 16 # 显示 redis 启动 logo(关闭可减少日志干扰) always-show-logo no ######################################### # rdb 持久化 ######################################### # rdb 失败时阻止写入,避免数据损坏 stop-writes-on-bgsave-error yes # 启用 rdb 数据压缩 rdbcompression yes # 启用 rdb 数据校验 rdbchecksum yes # rdb 文件名 dbfilename dump.rdb # 关闭 rdb 删除同步文件,防止误删除 rdb-del-sync-files no # rdb 文件存储目录,建议设为 ssd 盘 dir /data/app/redis/data/ ######################################### # 复制(主从同步) ######################################### # 允许副本在断开主库时仍然提供只读服务 replica-serve-stale-data yes # 副本节点只读模式 replica-read-only yes # 关闭无磁盘同步(默认使用磁盘同步) repl-diskless-sync no # 无磁盘同步的延迟 repl-diskless-sync-delay 5 # 关闭无磁盘加载 repl-diskless-load disabled # 保持默认 tcp nodelay 配置 repl-disable-tcp-nodelay no # 副本优先级(越小越容易成为主库) replica-priority 100 ######################################### # 内存管理 ######################################### # 默认不限制内存,可根据业务需求调整 maxmemory 0 # 不驱逐数据,可改为 allkeys-lru maxmemory-policy noeviction # 关闭惰性删除,避免额外 cpu 开销 lazyfree-lazy-eviction no # 关闭惰性过期 lazyfree-lazy-expire no # 关闭惰性删除 lazyfree-lazy-server-del no # 关闭副本惰性清理 replica-lazy-flush no # 关闭 oom 调整 oom-score-adj no # 仅在 oom 保护时启用 oom-score-adj-values 0 200 800 ######################################### # aof 持久化 ######################################### # 启用 aof 持久化 appendonly yes # aof 文件名 appendfilename "appendonly.aof" # 每秒同步一次,性能和安全的折中方案 appendfsync everysec # 重写时是否关闭同步 no-appendfsync-on-rewrite no # 触发 aof 重写的比例 auto-aof-rewrite-percentage 100 # 触发 aof 重写的最小大小 auto-aof-rewrite-min-size 64mb # 允许加载截断的 aof aof-load-truncated yes # aof 兼容 rdb 头部,减少重启时间 aof-use-rdb-preamble yes ######################################### # 性能优化 ######################################### # 调高 hz 频率,提高响应速度 hz 50 # 动态调整 hz dynamic-hz yes # aof 重写时增量同步 aof-rewrite-incremental-fsync yes # rdb 保存时增量同步 rdb-save-incremental-fsync yes # 启用 jemalloc 线程优化内存管理 jemalloc-bg-thread yes ######################################### # 限制与监控 ######################################### # 慢查询阈值(微秒) slowlog-log-slower-than 10000 # 慢查询日志最大条数 slowlog-max-len 128 # 关闭延迟监控 latency-monitor-threshold 0 # 关闭 key 事件通知 notify-keyspace-events "" # 普通客户端无限制 client-output-buffer-limit normal 0 0 0 # 副本节点限制 client-output-buffer-limit replica 256mb 64mb 60 # pubsub 限制 client-output-buffer-limit pubsub 32mb 8mb 60 ######################################### # 其他参数 ######################################### # rdb 触发条件 save 900 1 300 10 60 10000 # tcp 连接队列大小 tcp-backlog 511 # tcp 保活时间(秒) tcp-keepalive 300
总结
本篇博文详细解析了一份针对生产环境优化后的 redis 配置文件。通过合理设置网络参数、持久化策略、复制机制、内存管理和性能调优,redis 能够在高并发和大数据量场景下保持稳定高效运行。
实际部署时,应根据自身的硬件条件和业务特点对各项参数进行适当调整。对于环境安全、数据可靠性和性能优化等方面,建议参考官方文档和社区最佳实践,不断完善和调优配置。
到此这篇关于redis6.2.6生产环境redis.conf单机配置的文章就介绍到这了,更多相关redis redis.conf配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论