Redis 主从复制、哨兵、集群模式

Redis 主从复制、哨兵、集群模式

单节点模式

SpringBoot整合
@Bean(name = "singleClient")
public RedissonClient singleRedissonClient() {
    
    
    try {
    
    
        Config config = new Config();
        config.useSingleServer().setAddress("redis://" + redisProperties.getUrl() + ":" + redisProperties.getPort()).setDatabase(1);
        // 设置序列化方式
        Codec codec = new JsonJacksonCodec();
        config.setCodec(codec);
        RedissonClient redissonClient = Redisson.create(config);
        redissonClient.getBucket("one").set("one");
        logger.info("==========> singleRedissonClient()配置完成!");
        return redissonClient;
    } catch (Exception e) {
    
    
        logger.info("==========> singleRedissonClient() 出错:" + e.getMessage());
        return null;
    }
}

主从复制

配置方式

主节点配置不变,从节点配置信息加上slaveof 127.0.0.1 9000服务器地址和端口。

特点
  • 一个master可以有多个slave。
  • slave之间也可以互相同步。简单点说就是备份数据库,防止了数据的丢失等。
  • 可以用于读写分离和恢复丢失的数据。
  • 需要手动去配置主从节点,加入主节点挂了,需要重新定义主节点。
SpringBoot整合
/**
  * 主从模式
  */
@Bean(name = "masterSlaveClient")
@Primary
public RedissonClient masterSlaveClient() {
    
    
    try {
    
    
        Config config = new Config();
        config.useMasterSlaveServers().setMasterAddress("redis://127.0.0.1:6379")
            .addSlaveAddress("redis://127.0.0.1:6380");
        RedissonClient redissonClient = Redisson.create(config);
        redissonClient.getBucket("masterSlaveClient").set("masterSlaveClient");
        logger.info("==========> masterSlaveClient()配置完成!");
        return redissonClient;
    } catch (Exception e) {
    
    
        logger.info("==========> masterSlaveClient() 出错:" + e.getMessage());
        return null;
    }
}

哨兵模式

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是**哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。**简单来说,就是替代了人工手动方式切换主节点的操作。

哨兵的作用
  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。

  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

/**
  * 哨兵模式
  */
@Bean(name = "sentryClient")
public RedissonClient sentryClient(){
    
    
    try{
    
    
        Config config = new Config();
        // 需要启动/redis-sentinel
        config.useSentinelServers().setMasterName("mymaster")
            .addSentinelAddress("redis://127.0.0.1:6379")
            .addSentinelAddress("redis://127.0.0.1:6380");
        RedissonClient redissonClient = Redisson.create(config);
        redissonClient.getBucket("sentryClient").set("sentryClient");
        logger.info("==========> sentryClient()配置完成!");
        return redissonClient;
    }catch (Exception e){
    
    
        logger.info("==========> sentryClient() 出错:" + e.getMessage());
    }
    return null;
}

集群模式

需要开启Redis的集群模式,不然会报错。采用集群,就是分布式存储。即每台redis存储不同的内容。 集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。通过集群模式提供多个master主节点,每个节点都可以读写,节点之间可以互相通信;整个集群无中心节点。

集群模式特点
  • 自动将数据进行分片,每个 master 上放一部分数据。
  • 提供内置的高可用支持,部分 master 不可用时,还是可以继续工作的。
/**
  * 集群模式
  */
@Bean(name = "clustersClient")
public RedissonClient  clustersClient(){
    
    
    try{
    
    
        Config config = new Config();
        config.useClusterServers()
            .setScanInterval(2000)
            .addNodeAddress("redis://127.0.0.1:6379")
            .addNodeAddress("redis://127.0.0.1:6382")
            // ..
            // ..
            // ..
            .addNodeAddress("redis://127.0.0.1:6381");
        RedissonClient redissonClient = Redisson.create(config);
        redissonClient.getBucket("clustersClient").set("clustersClient");
        logger.info("==========> clustersClient()配置完成!");
        return redissonClient;
    }catch (Exception e){
    
    
        logger.info("==========> clustersClient() 出错:" + e.getMessage());
    }
    return null;
}

猜你喜欢

转载自blog.csdn.net/qq_37248504/article/details/113861502