在 Redis 多机(即分布式)环境下使用 Redisson 时,常见的部署方式包括主从模式、哨兵模式和集群模式,每种方式都有其适用场景与一致性保障机制。
Redisson 支持 Redis 的所有主流部署模式,配置方式如下:
config.useMasterSlaveServers()
.setMasterAddress("redis://master:6379")
.addSlaveAddress("redis://slave1:6379", "redis://slave2:6379");
```
2. **哨兵模式(Sentinel)**
提供高可用性,哨兵节点监控主节点状态,主节点宕机时自动切换。
配置方式:
```java
config.useSentinelServers()
.setMasterName("mymaster")
.addSentinelAddress("redis://sentinel1:26379", "redis://sentinel2:26379");
```
3. **集群模式(Cluster)**
支持数据分片,适合大规模数据和高并发场景。
配置方式:
```java
config.useClusterServers()
.addNodeAddress("redis://node1:6379", "redis://node2:6379");
```
---
### ✅ 二、如何保证数据一致性
在多机 Redis 环境中,由于主从同步延迟、节点故障或网络分区等问题,**数据一致性**成为关键挑战。Redisson 提供以下机制保障一致性:
#### 1. **分布式锁(RLock)**
确保同一时刻只有一个线程/节点能操作关键资源,避免并发冲突。
java
RLock lock = redisson.getLock("productLock");
lock.lock();
try {
// 更新数据库
db.update(product);
// 删除缓存
cache.remove(product.getId());
} finally {
lock.unlock();
}
#### 2. **读写锁(RReadWriteLock)**
支持多读单写,适合读多写少的场景,提升并发性能。
#### 3. **原子操作(基于 Lua 脚本)**
Redisson 使用 Lua 脚本保证多个 Redis 命令的原子性执行,避免中间状态被其他客户端干扰。
#### 4. **事务支持(RTransaction)**
Redisson 提供分布式事务机制,支持多个操作的原子提交或回滚。
#### 5. **主从强一致性读(getAndSet 等)**
在读写分离场景下,Redisson 提供如 `getAndSet()` 等方法,**强制路由到主节点执行**,避免读取到延迟的旧数据。
| 场景 | 推荐策略 |
|---|---|
| 读多写少 | 使用主从 + 读写锁 + 本地缓存 |
| 强一致性要求 | 使用分布式锁 + 写后删缓存 + 主节点读 |
| 高并发写 | 使用集群模式 + 分布式锁 + 事务 |
| 异步更新 | 使用消息队列 + 最终一致性策略 |
Redisson 在 Redis 多机环境下通过支持主从、哨兵、集群等多种部署模式,并结合分布式锁、读写锁、Lua 脚本、事务机制等手段,有效保障了分布式系统中的数据一致性问题。根据业务对一致性的要求,合理选择部署模式和一致性策略,可以在性能与一致性之间取得良好平衡。