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