Redisson 初始化

62 阅读1分钟
@Configuration
@Slf4j
public class RedissonConfigs {
    @Autowired
    private RedissonProperties properties;

    /**
     * 单机模式
     */
    @Bean
    @ConditionalOnProperty(name = "spring.redis.host")
    public RedissonClient redissonSingle() {
        Config config = new Config();
        config.setCodec(new org.redisson.client.codec.StringCodec());
        String redisAddress = "redis://" + properties.getHost() + ":" + properties.getPort();
        SingleServerConfig singleServerConfig = config.useSingleServer().setAddress(redisAddress);
        if (!StringUtils.isEmpty(properties.getPassword())) {
            singleServerConfig.setPassword(properties.getPassword());
        }
        return Redisson.create(config);
    }

    /**
     * 哨兵模式自动装配
     */
    @Bean
    @ConditionalOnProperty(name = "spring.redis.sentinel.master")
    public RedissonClient redissonSentinel() {
        Config config = new Config();
        config.setCodec(new org.redisson.client.codec.StringCodec());
        SentinelServersConfig serverConfig = config.useSentinelServers()
                .addSentinelAddress(getRedissonHostAddress(properties.getSentinel().getNodes()))
                .setMasterName(properties.getSentinel().getMaster())
                .setTimeout(properties.getTimeout())
                .setMasterConnectionPoolSize(properties.getMasterConnectionPoolSize())
                .setSlaveConnectionPoolSize(properties.getSlaveConnectionPoolSize());
        if (!StringUtils.isEmpty(properties.getPassword())) {
            serverConfig.setPassword(properties.getPassword());
        }
        return Redisson.create(config);
    }


    /**
     * 集群模式自动装配
     */
    @Bean
    @ConditionalOnProperty(name = "spring.redis.cluster.nodes")
    public RedissonClient redissonCluster() {
        Config config = new Config();
        config.setCodec(new org.redisson.client.codec.StringCodec());
        ClusterServersConfig clusterServersConfig = config.useClusterServers().setScanInterval(2000)
                .addNodeAddress(getRedissonHostAddress(properties.getCluster().getNodes()));
        if (!StringUtils.isEmpty(properties.getPassword())) {
            clusterServersConfig.setPassword(properties.getPassword());
        }
        return Redisson.create(config);
    }

    private String[] getRedissonHostAddress(String[] hosts) {
        String[] redissonHosts = new String[hosts.length];
        int i = 0;
        for (String host : hosts) {
            redissonHosts[i] = "redis://" + host;
            i++;
        }
        return redissonHosts;
    }
}
@Data
@Component
@ConfigurationProperties(prefix = "spring.redis")
public class RedissonProperties {
    private int timeout = 3000;
    private String host;
    private String port;
    private String password;
    private int connectionPoolSize = 64;
    private int connectionMinimumIdleSize = 10;
    private int slaveConnectionPoolSize = 250;
    private int masterConnectionPoolSize = 250;
    private Sentinel sentinel;
    private Cluster cluster;

    @Data
    public static class Sentinel {
        private String[] nodes;
        private String master;
    }

    @Data
    public static class Cluster {
        private String[] nodes;
        private int maxRedirects;
    }
}