系列导读本篇将深入讲解 Redis 集群架构设计与性能优化最佳实践。文章目录一、Redis 集群架构1.1 架构演进1.2 架构对比二、主从复制2.1 复制原理2.2 配置步骤三、哨兵模式3.1 架构图3.2 配置示例3.3 故障转移流程四、Cluster 模式4.1 架构图4.2 槽位分配4.3 配置示例4.4 Java 客户端五、性能优化5.1 内存优化5.2 网络优化5.3 持久化优化5.4 大 Key 优化总结一、Redis 集群架构1.1 架构演进单机模式 → 主从复制 → 哨兵模式 → Cluster 模式 ┌─────────────────────────────────────────────────────────────┐ │ 架构演进目标 │ ├─────────────────────────────────────────────────────────────┤ │ 单机简单但无法高可用 │ │ 主从数据备份但故障需手动切换 │ │ 哨兵自动故障转移但单点写入瓶颈 │ │ Cluster分布式存储高可用高性能 │ └─────────────────────────────────────────────────────────────┘1.2 架构对比架构高可用数据分片扩展性复杂度单机❌❌❌低主从部分❌❌低哨兵✅❌❌中Cluster✅✅✅高二、主从复制2.1 复制原理┌─────────┐ ┌─────────┐ │ Master │ ──── 同步数据 ────► │ Slave │ │ (写) │ │ (读) │ └─────────┘ └─────────┘ │ └──────────────────────────► ┌─────────┐ │ Slave │ └─────────┘2.2 配置步骤# Master 配置bind0.0.0.0 port6379daemonizeyes# Slave 配置replicaof192.168.1.1006379replica-read-onlyyes三、哨兵模式3.1 架构图┌─────────────────────────────────────────────────────────────┐ │ Sentinel 集群 │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │Sentinel1│ │Sentinel2│ │Sentinel3│ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ └─────────┼──────────────┼──────────────┼─────────────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ │ Master │ ─────复制──────► │ Slave │ └─────────┘ └─────────┘3.2 配置示例# sentinel.conf port 26379 sentinel monitor mymaster 192.168.1.100 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 1800003.3 故障转移流程1. Sentinel 检测到 Master 下线 2. Sentinel 选举领头 Sentinel 3. 领头 Sentinel 选举新 Master 4. 其他 Slave 复制新 Master 5. 客户端更新连接信息四、Cluster 模式4.1 架构图┌─────────────────────────────────────────────────────────────┐ │ Redis Cluster │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ Master1 │ │ Master2 │ │ Master3 │ │ │ │ 槽0-5460│ │槽5461-10922│ │槽10923-16383│ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ │ │ │ │ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │ │ │ Slave1 │ │ Slave2 │ │ Slave3 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ └─────────────────────────────────────────────────────────────┘4.2 槽位分配Redis Cluster 有 16384 个槽位 每个 Master 负责一部分槽位 key 的槽位计算CRC16(key) % 163844.3 配置示例# 创建集群redis-cli--clustercreate\192.168.1.100:6379\192.168.1.101:6379\192.168.1.102:6379\192.168.1.103:6379\192.168.1.104:6379\192.168.1.105:6379\--cluster-replicas14.4 Java 客户端ConfigurationpublicclassRedisClusterConfig{BeanpublicRedisConnectionFactoryredisConnectionFactory(){RedisClusterConfigurationconfignewRedisClusterConfiguration(Arrays.asList(192.168.1.100:6379,192.168.1.101:6379,192.168.1.102:6379));config.setPassword(password);returnnewLettuceConnectionFactory(config);}BeanpublicRedisTemplateString,ObjectredisTemplate(){RedisTemplateString,ObjecttemplatenewRedisTemplate();template.setConnectionFactory(redisConnectionFactory());template.setKeySerializer(newStringRedisSerializer());template.setValueSerializer(newGenericJackson2JsonRedisSerializer());returntemplate;}}五、性能优化5.1 内存优化# redis.conf maxmemory 4gb maxmemory-policy allkeys-lru # 数据结构优化 hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 set-max-intset-entries 512 zset-max-ziplist-entries 1285.2 网络优化# redis.conf tcp-backlog 511 tcp-keepalive 300 # 客户端连接池 spring: redis: lettuce: pool: max-active: 100 max-idle: 50 min-idle: 105.3 持久化优化# RDB 优化 save 900 1 save 300 10 save 60 10000 rdbcompression yes # AOF 优化 appendonly yes appendfsync everysec no-appendfsync-on-rewrite no5.4 大 Key 优化// 避免 Big Key// 差单个大 HashHSETbig:key field1 value1...field10000 value10000// 好拆分多个小 HashHSETsmall:key:1field1 value1...field100 value100HSETsmall:key:2field101 value101...field200 value200// 使用 Pipeline 批量操作publicvoidbatchSet(MapString,Stringdata){redisTemplate.executePipelined((RedisCallbackObject)connection-{data.forEach((key,value)-{connection.set(key.getBytes(),value.getBytes());});returnnull;});}总结✅集群架构演进历程、架构对比✅主从复制原理、配置✅哨兵模式故障转移✅Cluster 模式分布式存储✅性能优化内存、网络、持久化本系列完结作者刘~浪地球系列数据库与缓存三更新时间2026-04-11