Redis架构设计
Redis架构设计
主从复制架构
主从复制实现读写分离,Master负责写入,Slave负责读取,通过RDB和AOF实现数据同步。
# redis-slave.conf
replicaof 192.168.1.100 6379
masterauth yourpassword
replica-read-only yes
@Configuration
public class RedisMasterSlaveConfig {
@Bean
public RedisConnectionFactory masterConnection() {
LettuceConnectionFactory factory = new LettuceConnectionFactory(
new RedisStandaloneConfiguration("master-host", 6379));
return factory;
}
@Bean
@Qualifier("slave")
public RedisConnectionFactory slaveConnection() {
LettuceConnectionFactory factory = new LettuceConnectionFactory(
new RedisStandaloneConfiguration("slave-host", 6380));
factory.setReadOnly(true);
return factory;
}
}
哨兵模式
Sentinel模式提供自动故障转移,监控Master状态并在宕机时自动选举新Master。
# sentinel.conf
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
@Configuration
public class RedisSentinelConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
.master("mymaster")
.sentinel("sentinel1", 26379)
.sentinel("sentinel2", 26379)
.sentinel("sentinel3", 26379);
sentinelConfig.setPassword(RedisPassword.of("password"));
return new LettuceConnectionFactory(sentinelConfig);
}
}
Cluster模式
Redis Cluster通过16384个Hash Slot实现数据分片,支持水平扩展和自动故障转移。
# redis-cluster.conf
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
@Configuration
public class RedisClusterConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration()
.addNode(new RedisNode("node1", 7000))
.addNode(new RedisNode("node2", 7001))
.addNode(new RedisNode("node3", 7002));
clusterConfig.setMaxRedirects(3);
return new LettuceConnectionFactory(clusterConfig);
}
}
三种架构对比
| 特性 | 主从 | 哨兵 | Cluster |
|---|---|---|---|
| 高可用 | 手动切换 | 自动故障转移 | 自动故障转移 |
| 数据分片 | 不支持 | 不支持 | 16384 Slot |
| 扩展性 | 读扩展 | 读扩展 | 读写扩展 |
| 复杂度 | 低 | 中 | 高 |