redis配置详解
[root@VM-0-16-centos ~]# cat /etc/redis/redis.conf | grep -v "^[[:blank:]]*#" | grep -v '^#' | grep -v '^$'
bind 127.0.0.1 -::1 # 绑定 Redis 仅在本地可访问 (IPv4 和 IPv6)
protected-mode yes # 启用保护模式,限制外部访问,增强安全性
port 6379
# 设置 Redis 服务监听的端口,默认是 6379
tcp-backlog 511
# 设置 TCP backlog 的大小(队列长度),影响连接排队的数量
timeout 0
# 客户端超时,0表示不启用超时
tcp-keepalive 300 # 设置 TCP 保活时间,300秒
daemonize yes
# 是否以守护进程方式启动 Redis,yes 表示后台运行
pidfile /var/run/redis_6379.pid
# Redis 进程的 PID 文件路径
loglevel notice
# 设置日志级别,支持 debug、verbose、notice、warning,默认是 notice
logfile /var/log/redis/redis.log
# 设置 Redis 的日志文件路径
databases 16
# 设置 Redis 实例支持的数据库数量,默认是 16
always-show-logo no
# 是否每次启动时显示 Redis 标志
set-proc-title yes
# 是否设置进程名称
proc-title-template "{title} {listen-addr} {server-mode}"
# 设置进程名称模板
stop-writes-on-bgsave-error yes
# 如果后台保存 RDB 文件失败,是否停止写入数据
rdbcompression yes
# 是否启用 RDB 文件压缩
rdbchecksum yes
# 启用 RDB 文件校验和检查
dbfilename dump.rdb
# 设置 RDB 数据库文件的名称
rdb-del-sync-files no
# 是否删除同步文件
dir /var/lib/redis
# 设置 Redis 存储数据文件的目录
replica-serve-stale-data yes
# 设置从节点是否服务过期数据
replica-read-only yes
# 设置从节点是否只读
repl-diskless-sync no
# 是否启用无盘同步
repl-diskless-sync-delay 5
# 设置从节点无盘同步的延迟时间,单位秒
repl-diskless-load disabled
# 禁用从节点的无盘数据加载
repl-disable-tcp-nodelay no
# 是否禁用 TCP_NODELAY,减少延迟
replica-priority 100
# 设置从节点的优先级,优先级越高被选为主节点的可能性越大
acllog-max-len 128
# 设置访问控制列表(ACL)日志的最大长度
lazyfree-lazy-eviction no
# 是否启用惰性释放过期的键
lazyfree-lazy-expire no
# 是否启用惰性释放过期的键值对
lazyfree-lazy-server-del no
# 是否启用惰性释放服务器删除操作
replica-lazy-flush no
# 是否启用从节点的惰性刷新
lazyfree-lazy-user-del no
# 是否启用惰性释放用户删除操作
lazyfree-lazy-user-flush no
# 是否启用惰性刷新用户操作
oom-score-adj no
# 是否启用 OOM(内存不足)调整
oom-score-adj-values 0 200 800
# 配置 OOM 时,Redis 会根据这个设置调整进程的 OOM 优先级
disable-thp yes
# 禁用透明大页(Transparent Huge Pages),提高内存性能
appendonly no
# 是否启用 AOF 持久化,no 表示禁用
appendfilename "appendonly.aof"
# 设置 AOF 文件的文件名
appendfsync everysec
# 设置 AOF 刷新策略:每秒一次
no-appendfsync-on-rewrite no
# 在重写 AOF 时是否禁用同步
auto-aof-rewrite-percentage 100
# AOF 文件增长百分比,达到时会触发 AOF 重写
auto-aof-rewrite-min-size 64mb
# AOF 文件的最小大小,低于此大小不会触发自动重写
aof-load-truncated yes
# 是否加载截断的 AOF 文件
aof-use-rdb-preamble yes
# 是否使用 RDB 文件的前导信息来恢复 AOF 文件
lua-time-limit 5000
# 设置 Lua 脚本的执行最大时间(毫秒)
slowlog-log-slower-than 10000
# 设置慢查询日志阈值,单位是微秒
slowlog-max-len 128
# 设置慢查询日志的最大长度
latency-monitor-threshold 0
# 设置延迟监控的阈值(毫秒),如果为 0,则禁用延迟监控
notify-keyspace-events ""
# 配置键空间通知的事件类型
hash-max-ziplist-entries 512
# 设置哈希表压缩列表的最大条目数
hash-max-ziplist-value 64
# 设置哈希表压缩列表的最大值大小(字节)
list-max-ziplist-size -2
# 设置列表压缩列表的最大大小,-2 表示禁用
list-compress-depth 0
# 设置列表压缩的深度
set-max-intset-entries 512
# 设置集合使用整数集合的最大条目数
zset-max-ziplist-entries 128
# 设置有序集合使用压缩列表的最大条目数
zset-max-ziplist-value 64
# 设置有序集合压缩列表的最大值大小(字节)
hll-sparse-max-bytes 3000
# 设置 HyperLogLog 数据结构的最大字节数
stream-node-max-bytes 4096
# 设置流数据结构中每个节点的最大字节数
stream-node-max-entries 100
# 设置流数据结构中每个节点的最大条目数
activerehashing yes
# 启用哈希表的激活重哈希操作,避免 Redis 在操作期间出现阻塞
client-output-buffer-limit normal 0 0 0
# 设置普通客户端的输出缓冲区限制
client-output-buffer-limit replica 256mb 64mb 60
# 设置从节点客户端的输出缓冲区限制
client-output-buffer-limit pubsub 32mb 8mb 60
# 设置发布/订阅客户端的输出缓冲区限制
hz 10
# Redis 执行周期性的事件(例如后台保存)频率,单位为 Hz
dynamic-hz yes
# 启用动态事件周期,根据负载自动调整 hz 的频率
aof-rewrite-incremental-fsync yes
# 启用 AOF 重写时的增量同步
rdb-save-incremental-fsync yes
# 启用 RDB 保存时的增量同步
jemalloc-bg-thread yes
# 启用 jemalloc 内存分配器的后台线程,优化内存管理
Redis 作为缓存系统,常见的优化设置包括以下几个方面,旨在提高性能、减少延迟、提升稳定性和扩展性。下面是一些常见的优化配置:
1. 内存管理优化
- maxmemory
设置 Redis 实例的最大内存限制,当内存达到限制时,Redis 会根据
maxmemory-policy
策略进行驱逐。
maxmemory 2gb # 设置 Redis 最大内存为 2GB
-
maxmemory-policy 控制在达到最大内存限制时,Redis 驱逐键的策略。常见的策略包括:
-
volatile-lru
:只驱逐设置了过期时间的键,使用 LRU (Least Recently Used) 算法。 -
allkeys-lru
:驱逐所有键,使用 LRU 算法。 -
volatile-ttl
:仅驱逐设置了过期时间的键,优先驱逐 TTL 最近到期的键。 -
noeviction
:不驱逐任何键,直接返回错误。
maxmemory-policy allkeys-lru # 使用 LRU 算法驱逐最久未使用的键
- jemalloc 内存分配器
Redis 默认使用 jemalloc 作为内存分配器,它优化了内存的使用效率,减少内存碎片,特别是在高并发下表现更好。可以通过
jemalloc-bg-thread
来启用后台线程优化内存管理:
jemalloc-bg-thread yes # 启用 jemalloc 的后台线程
2. 持久化优化
- 关闭持久化(仅做缓存使用) 如果 Redis 仅作为缓存系统,且不需要持久化数据,可以禁用 AOF 和 RDB 持久化,以减少 I/O 操作,提高性能。
save "" # 禁用 RDB 持久化(不要自动保存)
appendonly no # 禁用 AOF 持久化
-
AOF 持久化优化 如果需要启用 AOF,优化配置如下:
-
appendfsync everysec
:每秒将写操作刷入磁盘一次,平衡了性能与数据安全。 -
no-appendfsync-on-rewrite
:在 AOF 重写期间不强制刷写磁盘,减少延迟。
appendonly yes # 启用 AOF 持久化
appendfsync everysec # 每秒同步一次
no-appendfsync-on-rewrite yes # 在 AOF 重写期间不强制同步
- RDB 持久化优化 配置较低频率的 RDB 快照,减少对磁盘的写入操作。
save 900 1 # 每 15 分钟保存一次 RDB 快照
save 300 10 # 每 5 分钟保存一次快照(如果有 10 次写操作)
3. 网络配置优化
- tcp-keepalive 设置 TCP 连接的保持活动时间,减少因长时间空闲导致的连接断开。
tcp-keepalive 300 # 设置 TCP keepalive 时间为 5 分钟
- 调整客户端输出缓冲区限制 优化客户端的输出缓冲区,以防止由于大量数据返回导致的内存过载。
client-output-buffer-limit normal 0 0 0 # 不限制普通客户端输出缓冲区
client-output-buffer-limit replica 256mb 64mb 60 # 设置从节点的输出缓冲区限制
client-output-buffer-limit pubsub 32mb 8mb 60 # 设置发布/订阅客户端的缓冲区限制
- bind 和 protected-mode 限制 Redis 仅绑定到本地接口,增强安全性,防止外部攻击。
bind 127.0.0.1 # 仅绑定本地接口
protected-mode yes # 启用保护模式,禁止外部访问
4. 性能优化
- hash-max-ziplist-entries & hash-max-ziplist-value 使用压缩列表(Ziplist)存储小的哈希数据,减少内存使用。
hash-max-ziplist-entries 512 # 哈希表项数目超过 512 时,不使用压缩列表
hash-max-ziplist-value 64 # 哈希值超过 64 字节时,不使用压缩列表
- list-max-ziplist-size & list-compress-depth 设置列表使用压缩列表的大小和深度,以减少内存使用。
list-max-ziplist-size -2 # 禁用列表压缩列表
list-compress-depth 0 # 禁用列表压缩
- zset-max-ziplist-entries & zset-max-ziplist-value 设置有序集合使用压缩列表的最大条目数和最大值大小。
zset-max-ziplist-entries 128 # 有序集合最大条目数为 128
zset-max-ziplist-value 64 # 有序集合中单个值的最大字节数
- client-output-buffer-limit 控制客户端的输出缓冲区,防止过多数据积压导致内存占用过高。
client-output-buffer-limit normal 0 0 0 # 默认没有限制
client-output-buffer-limit replica 256mb 64mb 60
5. 其他优化
- 活跃重哈希(active-rehashing) 启用哈希表的动态重哈希操作,避免 Redis 在操作期间出现阻塞。
activerehashing yes # 启用活跃重哈希
- slowlog-log-slower-than 配置慢查询日志的阈值,记录超过指定时间的查询操作,帮助识别性能瓶颈。
slowlog-log-slower-than 10000 # 记录执行时间超过 10 毫秒的查询
slowlog-max-len 128 # 设置慢查询日志的最大长度
- 动态调整
hz
参数 Redis 的hz
参数影响后台任务的频率,动态调整可以根据负载优化性能。
dynamic-hz yes # 根据负载动态调整
hz 10 # 设置默认的 hz 值
6. 高可用与集群优化
- 启用集群模式(Cluster Mode) 如果使用 Redis 集群,可以启用集群模式以支持横向扩展。
cluster-enabled yes # 启用 Redis 集群模式
cluster-config-file nodes.conf # 设置集群配置文件路径
- 复制优化(replica) 在从节点中配置适当的设置以提高数据同步性能,避免影响主节点的性能。
replica-read-only yes # 设置从节点为只读模式
replica-priority 100 # 设置从节点的优先级
这些设置是 Redis 常见的优化配置,可以根据你的业务需求和 Redis 实际使用情况进行调整。