← 返回首页

Redis架构设计

📂 architecture ⏱ 1 min 171 words

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
扩展性 读扩展 读扩展 读写扩展
复杂度