1 概述node
Redisson實現了分佈式和可擴展的Java數據結構,功能較爲簡單,不支持字符串操做,不支持排序、事務、管道、分區等Redis特性。Redisson的宗旨是促進使用者對Redis的關注分離,從而讓使用者可以將精力更集中地放在處理業務邏輯上。redis
2 特色spring
3 第三方框架整合apache
4 spring boot 整合 Redissonapi
spring: redisson: enabled: true cluster: false nodes: x.x.x.x:x password: xxxx
package com.yx.redis.redisson; 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.SingleServerConfig; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.util.ObjectUtils; /** * @Auther: yx * @Date: 2019-04-30 15:55 * @Description: RedissonConfig */ @Configuration @Conditional(RedissonCondition.class) @EnableConfigurationProperties({RedissonProperties.class}) @Slf4j public class RedissonConfig { @Bean public RedissonProperties getRedissonProperties() { return new RedissonProperties(); } /** * 單機模式自動裝配 * @return */ @Bean @ConditionalOnProperty(name="spring.redisson.cluster", havingValue = "false") public RedissonClient getSingleRedisson() { Config config = new Config(); RedissonProperties redissonProperties = getRedissonProperties(); String nodes = redissonProperties.getNodes(); if (StringUtils.isEmpty(nodes)) { throw new RuntimeException("nodes is not allow empty! please check your redis config"); } SingleServerConfig serverConfig = config.useSingleServer() .setAddress("redis://" + nodes) .setTimeout(redissonProperties.getTimeout()) .setConnectionPoolSize(redissonProperties.getConnectionPoolSize()) .setConnectionMinimumIdleSize(redissonProperties.getConnectionMinimumIdleSize()); if(StringUtils.isNotBlank(redissonProperties.getPassword())) { serverConfig.setPassword(redissonProperties.getPassword()); } log.info("init redisson success .... "); return Redisson.create(config); } @Bean @ConditionalOnProperty(name="spring.redisson.cluster", havingValue = "true") public RedissonClient getClusterRedisson(){ RedissonProperties redissonProperties = getRedissonProperties(); String[] nodes = redissonProperties.getNodes().split(","); if (ObjectUtils.isEmpty(nodes)) { throw new RuntimeException("nodes is not allow empty! please check your redis config"); } for(int i=0;i<nodes.length;i++){ nodes[i] = "redis://"+nodes[i]; } RedissonClient redisson = null; Config config = new Config(); ClusterServersConfig clusterServersConfig = config.useClusterServers() .setScanInterval(2000) .setTimeout(redissonProperties.getTimeout()) .addNodeAddress(nodes); if(StringUtils.isNotBlank(redissonProperties.getPassword())) { clusterServersConfig.setPassword(redissonProperties.getPassword()); } redisson = Redisson.create(config); log.info("init redisson cluster success .... "); return redisson; } }
package com.yx.redis.redisson; import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.util.ObjectUtils; /** * @Auther: yx * @Date: 2019-04-30 15:56 * @Description: RedissionCondition */ public class RedissonCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { return propertyIsTrue(context, "spring.redisson.enabled"); } private static boolean propertyIsTrue(ConditionContext context, String key) { return context.getEnvironment().getProperty(key, Boolean.TYPE, Boolean.FALSE); } }
package com.yx.redis.redisson; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; /** * @Auther: yx * @Date: 2019-04-30 15:52 * @Description: RedissonProperties */ @Data @ConfigurationProperties(prefix = "spring.redisson") public class RedissonProperties { private int timeout = 3000; private Boolean cluster; private String nodes; private String password; private int database = 0; private int connectionPoolSize = 64; private int connectionMinimumIdleSize = 10; private int slaveConnectionPoolSize = 250; private int masterConnectionPoolSize = 250; }