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"); // 自动路由到对应槽位节点
架构对比
架构 | 适用场景 | 数据一致性 | 扩展性 |
---|---|---|---|
单机 | 开发测试/小数据量 | 强一致 | 不可扩展 |
主从复制 | 读多写少 | 最终一致(异步) | 垂直扩展 |
哨兵模式 | 高可用生产环境 | 最终一致 | 有限扩展 |
集群模式 | 大数据量/高并发 | 分区一致 | 水平扩展 |
重要注意事项
内存管理
Redis最大内存通过maxmemory
配置,超过时触发淘汰策略(LRU/LFU等)持久化选择
- RDB:高性能快照,可能丢失数据
- AOF:高安全日志,性能较低
- 生产环境建议
RDB+AOF
混合使用(Redis 4.0+)
线程模型
Redis 6.0+引入多线程I/O(默认关闭),但命令执行仍是单线程:Java客户端选择
- Jedis:同步阻塞(简单直接)
- Lettuce(JDK8+推荐):基于Netty的异步非阻塞,支持响应式编程
总结
Redis通过内存存储+高效数据结构实现超高吞吐(10万+QPS),架构演进路线:
单机 → 主从(读写分离)→ 哨兵(高可用)→ 集群(分布式)
典型应用场景:
- 缓存击穿保护(Mutex Key)
- 分布式锁(SETNX命令)
- 实时排行榜(SortedSet)
- 消息队列(Streams数据类型)
Java开发建议:生产环境优先使用Lettuce客户端(支持异步API),集群环境使用
RedisTemplate
+ Spring Data Redis抽象层。