数据库与缓存--Redis 集群架构与优化

系列导读:本篇将深入讲解 Redis 集群架构设计与性能优化最佳实践。


文章目录

    • [一、Redis 集群架构](#一、Redis 集群架构)
      • [1.1 架构演进](#1.1 架构演进)
      • [1.2 架构对比](#1.2 架构对比)
    • 二、主从复制
      • [2.1 复制原理](#2.1 复制原理)
      • [2.2 配置步骤](#2.2 配置步骤)
    • 三、哨兵模式
      • [3.1 架构图](#3.1 架构图)
      • [3.2 配置示例](#3.2 配置示例)
      • [3.3 故障转移流程](#3.3 故障转移流程)
    • [四、Cluster 模式](#四、Cluster 模式)
      • [4.1 架构图](#4.1 架构图)
      • [4.2 槽位分配](#4.2 槽位分配)
      • [4.3 配置示例](#4.3 配置示例)
      • [4.4 Java 客户端](#4.4 Java 客户端)
    • 五、性能优化
      • [5.1 内存优化](#5.1 内存优化)
      • [5.2 网络优化](#5.2 网络优化)
      • [5.3 持久化优化](#5.3 持久化优化)
      • [5.4 大 Key 优化](#5.4 大 Key 优化)
    • 总结

一、Redis 集群架构

1.1 架构演进

复制代码
单机模式 → 主从复制 → 哨兵模式 → Cluster 模式

┌─────────────────────────────────────────────────────────────┐
│                    架构演进目标                              │
├─────────────────────────────────────────────────────────────┤
│  单机:简单,但无法高可用                                     │
│  主从:数据备份,但故障需手动切换                              │
│  哨兵:自动故障转移,但单点写入瓶颈                            │
│  Cluster:分布式存储,高可用+高性能                           │
└─────────────────────────────────────────────────────────────┘

1.2 架构对比

架构 高可用 数据分片 扩展性 复杂度
单机
主从 部分
哨兵
Cluster

二、主从复制

2.1 复制原理

复制代码
┌─────────┐                    ┌─────────┐
│ Master  │ ──── 同步数据 ────► │  Slave  │
│  (写)   │                    │  (读)   │
└─────────┘                    └─────────┘
     │
     └──────────────────────────► ┌─────────┐
                                  │  Slave  │
                                  └─────────┘

2.2 配置步骤

bash 复制代码
# Master 配置
bind 0.0.0.0
port 6379
daemonize yes

# Slave 配置
replicaof 192.168.1.100 6379
replica-read-only yes

三、哨兵模式

3.1 架构图

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    Sentinel 集群                            │
│    ┌─────────┐    ┌─────────┐    ┌─────────┐                │
│    │Sentinel1│    │Sentinel2│    │Sentinel3│                │
│    └────┬────┘    └────┬────┘    └────┬────┘                │
└─────────┼──────────────┼──────────────┼─────────────────────┘
          │              │              │
          ▼              ▼              ▼
     ┌─────────┐                  ┌─────────┐
     │ Master  │ ─────复制──────► │  Slave  │
     └─────────┘                  └─────────┘

3.2 配置示例

conf 复制代码
# 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 180000

3.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) % 16384

4.3 配置示例

bash 复制代码
# 创建集群
redis-cli --cluster create \
  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-replicas 1

4.4 Java 客户端

java 复制代码
@Configuration
public class RedisClusterConfig {
    
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisClusterConfiguration config = new RedisClusterConfiguration(
            Arrays.asList(
                "192.168.1.100:6379",
                "192.168.1.101:6379",
                "192.168.1.102:6379"
            )
        );
        config.setPassword("password");
        return new LettuceConnectionFactory(config);
    }
    
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

五、性能优化

5.1 内存优化

conf 复制代码
# 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 128

5.2 网络优化

conf 复制代码
# redis.conf
tcp-backlog 511
tcp-keepalive 300

# 客户端连接池
spring:
  redis:
    lettuce:
      pool:
        max-active: 100
        max-idle: 50
        min-idle: 10

5.3 持久化优化

conf 复制代码
# RDB 优化
save 900 1
save 300 10
save 60 10000
rdbcompression yes

# AOF 优化
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no

5.4 大 Key 优化

java 复制代码
// 避免 Big Key
// 差:单个大 Hash
HSET big:key field1 value1 ... field10000 value10000

// 好:拆分多个小 Hash
HSET small:key:1 field1 value1 ... field100 value100
HSET small:key:2 field101 value101 ... field200 value200

// 使用 Pipeline 批量操作
public void batchSet(Map<String, String> data) {
    redisTemplate.executePipelined((RedisCallback<Object>) connection -> {
        data.forEach((key, value) -> {
            connection.set(key.getBytes(), value.getBytes());
        });
        return null;
    });
}

总结

集群架构 :演进历程、架构对比

主从复制 :原理、配置

哨兵模式 :故障转移

Cluster 模式 :分布式存储

性能优化:内存、网络、持久化

本系列完结


作者 :刘~浪地球
系列 :数据库与缓存(三)
更新时间:2026-04-11

相关推荐
羊小蜜.2 小时前
Mysql 11: 存储过程全解——从创建到使用
android·数据库·mysql·存储过程
A__tao2 小时前
一键实现 SQL 转 Elasticsearch Mapping(支持字段注释 + meta 描述)
数据库·sql·elasticsearch
努力努力再努力wz2 小时前
【C++高阶系列】外存查找的极致艺术:数据库偏爱的B+树底层架构剖析与C++完整实现!(附B+树实现的源码)
linux·运维·服务器·数据结构·数据库·c++·b树
知识分享小能手2 小时前
MongoDB入门学习教程,从入门到精通,MongoDB 持久性完全指南(20)
数据库·学习·mongodb
IT枫斗者2 小时前
AI Agent 设计模式全景解析:从单体智能到分布式协作的架构演进
人工智能·redis·分布式·算法·spring·缓存·设计模式
何中应2 小时前
Doris部署&连接
大数据·数据库·时序数据库·doris
云边有个稻草人2 小时前
KES 表空间目录自动创建特性:简化存储管理、提升运维效率
数据库·国产数据库·kes
clear sky .2 小时前
[linux]buildroot什么用途
linux·运维·数据库
羊小蜜.2 小时前
Mysql 12: 视图全解——从创建到使用
android·数据库·mysql·视图