Java应用通过Redis主从架构实现读写分离,核心是写请求走主节点、读请求自动分发至从节点;关键依赖客户端(如Redisson)识别角色、路由请求并容错,而非Redis服务端配置。

Java 应用通过 Redis 主从架构实现读写分离,核心是让写请求走主节点、读请求自动分发到从节点,从而把单点压力拆开。关键不在 Redis 本身配置,而在于客户端如何识别角色、路由请求并容错。
明确主从角色与连接方式
Redis 服务端需先搭建好一主多从结构(如 7001 主,7002/7003 从),并确保:
- 主节点开启写权限,从节点配置 slave-read-only yes(默认开启),禁止误写
- 从节点能连上主节点,master_link_status: up 可通过
INFO REPLICATION验证 - 若主节点启用了密码认证(
requirepass),从节点配置中必须设置 masterauth
使用 Redisson 实现自动读写分离
Redisson 是 Java 生态中最成熟的支持主从读写分离的客户端。它内置负载均衡和故障转移逻辑,无需手动判断节点角色:
- 配置主地址 + 多个从地址,指定 ReadMode.SLAVE,所有读操作(GET、HGET 等)自动打到从节点
- 写操作(SET、DEL、INCR)强制走主节点,保证数据一致性
- 支持连接池配置(
setSlaveConnectionPoolSize)、超时、重试等生产级参数
示例代码片段:
立即学习“Java免费学习笔记(深入)”;
Config config = new Config();config.useMasterSlaveServers()
.setMasterAddress("redis://192.168.80.134:7001")
.addSlaveAddress("redis://192.168.80.134:7002", "redis://192.168.80.134:7003")
.setReadMode(ReadMode.SLAVE)
.setSlaveConnectionPoolSize(16);
RedisClient client = Redisson.create(config);
自定义路由需谨慎处理边界情况
如果不用 Redisson,而是基于 Jedis 或 Lettuce 自行封装路由逻辑,要注意几个硬伤:
- 不能只靠 IP+端口静态分配读写——从节点可能宕机或同步延迟,需结合
INFO REPLICATION动态探测状态 - 读从节点时,若配置了 slave-serve-stale-data yes,即使主从断连,从节点仍可响应旧数据;设为 no 则直接报错,业务需兜底
- 主节点故障后,没有哨兵(Sentinel)或集群(Cluster)配合,无法自动升主,整个写链路会中断
配合哨兵提升可用性
纯主从只是读写分离的基础,不解决高可用问题。建议在生产环境叠加 Redis Sentinel:
- Sentinel 监控主节点健康状态,故障时自动选举新主,并通知客户端更新地址
- Redisson 支持
useSentinelServers(),自动订阅 Sentinel 的主节点变更事件 - Jedis 则需使用
JedisSentinelPool,由它维护当前主节点连接


















