SpringBoot连接redis,支持单点、集群、哨兵模式自适应配置(二、redissonClient)


    @Autowired
    RedisProperties redisProperties;

    /**
     * 哨兵模式自动装配
     *
     * @return
     */
    @Bean(destroyMethod = "shutdown")
    @ConditionalOnProperty(name="spring.redis.strategy", havingValue = "3")
    public RedissonClient redissonSentinel() {
        Config config = new Config();
        String[] nodes = redisProperties.getSentinel().getNodes().split(",");
        List<String> newNodes = new ArrayList(nodes.length);
        Arrays.stream(nodes).forEach((index) -> newNodes.add(
                index.startsWith("redis://") ? index : "redis://" + index));
        SentinelServersConfig sentinelServersConfig = config.useSentinelServers()
                .addSentinelAddress(newNodes.toArray(new String[0]))
                .setMasterName(redisProperties.getSentinel().getMaster())
                .setMasterConnectionPoolSize(250)
                .setSlaveConnectionPoolSize(250);
        if (StringUtils.isNotBlank(redisProperties.getPassword())) {
            sentinelServersConfig.setPassword(redisProperties.getPassword());
        }
        config.setCodec(new JsonJacksonCodec(objectMapper()));
        return Redisson.create(config);
    }

    /**
     * 集群模式自动装配
     *
     * @return
     */
    @Bean(destroyMethod = "shutdown")
    @ConditionalOnProperty(name="spring.redis.strategy", havingValue = "2")
    public RedissonClient redissonCluster() {
        Config config = new Config();
        List<String> nodes = redisProperties.getCluster().getNodes();
        List<String> newNodes = Lists.newArrayListWithCapacity(nodes.size());
        nodes.forEach((index) -> newNodes.add(
                index.startsWith("redis://") ? index : "redis://" + index));
        ClusterServersConfig clusterServersConfig = config.useClusterServers()
                .addNodeAddress(newNodes.toArray(new String[0]));
        if (StringUtils.isNotBlank(redisProperties.getPassword())) {
            clusterServersConfig.setPassword(redisProperties.getPassword());
        }
        config.setCodec(new JsonJacksonCodec(objectMapper()));
        return Redisson.create(config);
    }

    /**
     * 单机模式自动装配
     *
     * @return
     */
    @Bean(destroyMethod = "shutdown")
    @ConditionalOnProperty(name="spring.redis.strategy", havingValue = "1")
    public RedissonClient redissonSingle() {
        Config config = new Config();
        String redisAddress=String.format("redis://%s:%d",redisProperties.getHost(),redisProperties.getPort());
        SingleServerConfig singleServerConfig = config.useSingleServer()
                .setAddress(redisAddress)
                .setConnectionMinimumIdleSize(redisProperties.getPool().getMinIdle());
        if (StringUtils.isNotBlank(redisProperties.getPassword())) {
            singleServerConfig.setPassword(redisProperties.getPassword());
        }
        config.setCodec(new JsonJacksonCodec(objectMapper()));
        return Redisson.create(config);
    }

    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        //大小写不敏感
        mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setDateFormat(new SimpleDateFormat(GlobalConstant.DEFAULT_DATE_TIME_FORMAT));
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(GlobalConstant.DEFAULT_DATE_TIME_FORMAT)));
        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(GlobalConstant.DEFAULT_DATE_TIME_FORMAT)));
        mapper.registerModule(javaTimeModule);
        return mapper;
    }
Spring Boot 中使用 Redisson 进行集群配置的步骤如下: 1. 首先,确保你已经在你的 Spring Boot 项目中添加了 Redisson 的依赖,你可以在 `pom.xml` 文件中添加以下依赖项: ```xml <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.15.5</version> </dependency> ``` 2. 创建一个配置类(例如 `RedissonConfig`),并在其中添加 Redisson配置。可以通过以下方式实现: ```java @Configuration public class RedissonConfig { @Bean public RedissonClient redissonClient() { Config config = new Config(); // 设置 Redis 集群的节点地址 config.useClusterServers() .addNodeAddress("redis://host1:port1") .addNodeAddress("redis://host2:port2") .addNodeAddress("redis://host3:port3") // 如果需要密码认证,可以添加以下配置 .setPassword("your_password"); return Redisson.create(config); } } ``` 确保将 `host1:port1`、`host2:port2`、`host3:port3` 替换为你的 Redis 集群节点的实际地址和端口。如果集群需要密码认证,记得将 `your_password` 替换为真实密码。 3. 现在,你可以在其他的 Spring Bean 中注入 `RedissonClient` 对象,并使用它来操作 Redis。例如: ```java @Service public class MyService { @Autowired private RedissonClient redissonClient; public void someMethod() { RMap<String, String> map = redissonClient.getMap("myMap"); map.put("key", "value"); } } ``` 这样,你就可以使用 RedissonSpring Boot 中进行 Redis 集群配置了。希望这能帮到你!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值