Redisson兼容redis多模式部署的配置方式

RedissonConfig.java

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.ClusterServersConfig;
import org.redisson.config.Config;
import org.redisson.config.SentinelServersConfig;
import org.redisson.config.SingleServerConfig;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;

@Slf4j
@Configuration
public class RedissonConfig {

    @Resource
    private RedisProperties redisProperties;

    private int connectionPoolSize = 64;
    private int connectionMinimumIdleSize = 10;
    private int pingConnectionInterval = 60000;
    private static String ADDRESS_PREFIX = "redis://";

    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClient() {
        // 哨兵模式
        RedisProperties.Sentinel sentinel = redisProperties.getSentinel();
        if (Objects.nonNull(sentinel)) {
            log.info("redis is sentinel mode");
            return redissonSentinel();
        }
        // 集群模式
        RedisProperties.Cluster cluster = redisProperties.getCluster();
        if (Objects.nonNull(cluster)) {
            log.info("redis is cluster mode");
            return redissonCluster();
        }
        // 单机模式
        String host = redisProperties.getHost();
        if (StringUtils.isNotBlank(host)) {
            log.info("redis is single mode");
            return redissonSingle();
        }

        log.error("redisson config can not support this redis mode");
        return null;
    }

    /**
     * 单机模式
     */
    private RedissonClient redissonSingle() {
        String host = redisProperties.getHost();
        String password = redisProperties.getPassword();
        int port = redisProperties.getPort();
        // 声明一个配置类
        Config config = new Config();
        SingleServerConfig serverConfig = config.useSingleServer()
                .setAddress(ADDRESS_PREFIX + host + ":" + port)
                .setPingConnectionInterval(pingConnectionInterval)
                .setConnectionPoolSize(this.connectionPoolSize)
                .setConnectionMinimumIdleSize(this.connectionMinimumIdleSize);
        // 判断密码
        if (!StringUtils.isEmpty(password)) {
            serverConfig.setPassword(password);
        }
        return Redisson.create(config);
    }


    /**
     * 哨兵模式
     */
    private RedissonClient redissonSentinel() {
        // mymaster
        String masterName = redisProperties.getSentinel().getMaster();
        // 127.0.0.1:26389,127.0.0.1:26379
        List<String> nodes = redisProperties.getSentinel().getNodes();
        String password = redisProperties.getPassword();
        // 声明一个配置类
        Config config = new Config();
        SentinelServersConfig sentinelServersConfig = config.useSentinelServers();
        // 扫描间隔
        sentinelServersConfig.setScanInterval(2000);
        // 判断密码
        if (!StringUtils.isEmpty(password)) {
            sentinelServersConfig.setPassword(password);
        }
        sentinelServersConfig.setMasterName(masterName);
        String[] nodeArr = nodes.toArray(new String[nodes.size()]);
        for (int i = 0; i < nodeArr.length; i++) {
            nodeArr[i] = ADDRESS_PREFIX + nodeArr[i];
        }
        // 添加redis节点
        sentinelServersConfig.addSentinelAddress(nodeArr);
        return Redisson.create(config);
    }

    /**
     * 集群模式
     */
    private RedissonClient redissonCluster() {
        // 192.168.116.156:1901,192.168.116.156:1902
        List<String> nodes = redisProperties.getCluster().getNodes();
        String password = redisProperties.getPassword();
        // 声明一个配置类
        Config config = new Config();
        ClusterServersConfig clusterServersConfig = config.useClusterServers();
        // 扫描间隔
        clusterServersConfig.setScanInterval(2000);
        // 判断密码
        if (!StringUtils.isEmpty(password)) {
            clusterServersConfig.setPassword(password);
        }
        // 添加redis节点
        for (String node : nodes) {
            clusterServersConfig.addNodeAddress(ADDRESS_PREFIX + node);
        }
        return Redisson.create(config);
    }

}

YAML配置

1、单机部署/主从部署

spring:
  redis:
    database: 1
    host: 192.168.0.111
    password: 123456
    port: 6379
    timeout: 3000

2、哨兵部署

spring:
  redis:
    database: 1
    password: 123456
    port: 6379
    sentinel:
      master: mymaster
      nodes:
        - 192.168.0.111:26379
        - 192.168.0.112:26379
        - 192.168.0.113:26379
      password: 123456
    timeout: 10000ms

3、集群部署

spring:
  redis:
    password: 123456
    database: 1
    cluster:
      nodes:
        - 192.168.0.111:6379
        - 192.168.0.112:6379
        - 192.168.0.113:6379
    timeout: 3000ms

相关推荐

  1. Redisson兼容redis模式部署配置方式

    2024-03-31 15:16:03       40 阅读
  2. Redisson配置

    2024-03-31 15:16:03       60 阅读
  3. 【MODBUS】Modbus 主从模式部署方式

    2024-03-31 15:16:03       65 阅读
  4. Redis哨兵模式与集群模式快速部署

    2024-03-31 15:16:03       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 15:16:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 15:16:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 15:16:03       87 阅读
  4. Python语言-面向对象

    2024-03-31 15:16:03       96 阅读

热门阅读

  1. 【微服务篇】深入理解分布式消息队列系统

    2024-03-31 15:16:03       38 阅读
  2. mybatis EXISTS

    2024-03-31 15:16:03       32 阅读
  3. 深入理解zookeeper

    2024-03-31 15:16:03       40 阅读
  4. git 基于当前分支创建新分支

    2024-03-31 15:16:03       36 阅读
  5. sql-学习-day1

    2024-03-31 15:16:03       38 阅读
  6. Flutter开发的Web应用 构建及部署 标准流程指南

    2024-03-31 15:16:03       31 阅读
  7. Github 2024-03-27C开源项目日报Top10

    2024-03-31 15:16:03       36 阅读
  8. go 安装

    2024-03-31 15:16:03       35 阅读
  9. LeetCode热题Hot100 - 寻找两个正序数组的中位数

    2024-03-31 15:16:03       40 阅读
  10. Go-JWT完整示例

    2024-03-31 15:16:03       40 阅读
  11. c语音函数大全(V开头)

    2024-03-31 15:16:03       36 阅读
  12. Qt QOSG学习网站推荐

    2024-03-31 15:16:03       40 阅读
  13. Centos搭建docker mysql集群

    2024-03-31 15:16:03       46 阅读