Skip to content

Redis架构详解

Redis是一个内存型键值数据库,采用单线程事件驱动架构(核心处理线程单线程),支持多种数据结构和持久化方案。其架构设计专注于高性能、低延迟和可扩展性。

以下是Redis架构的核心组成部分:

一、单机架构

1. 是什么?
Redis基础架构,单进程单线程模型(6.0后引入多线程I/O),包含:

  • 事件循环(Event Loop):处理网络请求
  • 内存存储引擎:数据全内存存储
  • 持久化模块:RDB快照和AOF日志
  • 客户端连接池

2. 解决什么问题

  • 解决磁盘数据库响应慢的问题(内存访问速度比磁盘快10万倍)
  • 避免多线程竞争问题(单线程处理命令保证原子性)
  • 简化架构设计

3. 核心组件


二、主从复制架构

1. 是什么?
一主多从架构,主节点处理写操作,从节点异步复制数据。

2. 解决什么问题

  • 数据冗余备份(高可用基础)
  • 读写分离(主写从读)
  • 负载均衡(查询分流到从节点)

3. 数据同步流程


三、哨兵模式(Sentinel)

1. 是什么?
分布式监控系统,监控主从节点状态并自动故障转移。

2. 解决什么问题

  • 主节点故障自动切换(自动选举新主)
  • 服务发现(客户端获取最新主节点地址)
  • 集群状态监控

3. 故障转移流程


四、集群模式(Cluster)

1. 是什么?
分布式架构,数据分片存储在16384个槽(slot)中,支持自动分片和故障转移。

2. 解决什么问题

  • 海量数据存储(突破单机内存限制)
  • 线性扩展性能(支持1000+节点)
  • 高可用(内置主从复制+故障转移)

3. 数据分片原理

java
// Java客户端访问示例(Jedis)
JedisCluster cluster = new JedisCluster(nodes);
cluster.set("key", "value");  // 自动路由到对应槽位节点

架构对比

架构适用场景数据一致性扩展性
单机开发测试/小数据量强一致不可扩展
主从复制读多写少最终一致(异步)垂直扩展
哨兵模式高可用生产环境最终一致有限扩展
集群模式大数据量/高并发分区一致水平扩展

重要注意事项

  1. 内存管理
    Redis最大内存通过maxmemory配置,超过时触发淘汰策略(LRU/LFU等)

  2. 持久化选择

    • RDB:高性能快照,可能丢失数据
    • AOF:高安全日志,性能较低
    • 生产环境建议RDB+AOF混合使用(Redis 4.0+)
  3. 线程模型
    Redis 6.0+引入多线程I/O(默认关闭),但命令执行仍是单线程:

  4. Java客户端选择

    • Jedis:同步阻塞(简单直接)
    • Lettuce(JDK8+推荐):基于Netty的异步非阻塞,支持响应式编程

总结

Redis通过内存存储+高效数据结构实现超高吞吐(10万+QPS),架构演进路线:

单机 → 主从(读写分离)→ 哨兵(高可用)→ 集群(分布式)

典型应用场景

  • 缓存击穿保护(Mutex Key)
  • 分布式锁(SETNX命令)
  • 实时排行榜(SortedSet)
  • 消息队列(Streams数据类型)

Java开发建议:生产环境优先使用Lettuce客户端(支持异步API),集群环境使用RedisTemplate + Spring Data Redis抽象层。