Spring boot 整合 Redisson

1  概述node

  Redisson實現了分佈式和可擴展的Java數據結構,功能較爲簡單,不支持字符串操做,不支持排序、事務、管道、分區等Redis特性。Redisson的宗旨是促進使用者對Redis的關注分離,從而讓使用者可以將精力更集中地放在處理業務邏輯上。redis

 

2     特色spring

  1. Redisson中的方法則是進行比較高的抽象,每一個方法調用可能進行了一個或多個Redis方法調用。
  2. Redisson使用非阻塞的I/O和基於Netty框架的事件驅動的通訊層,其方法調用是異步的。Redisson的API是線程安全的,因此能夠操做單個Redisson鏈接來完成各類操做。
  3. Redisson不只提供了一系列的分佈式Java經常使用對象,基本能夠與Java的基本數據結構通用,還提供了許多分佈式服務,其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish/Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service)。
    在分佈式開發中,Redisson可提供更便捷的方法。

3  第三方框架整合apache

  1. Redisson提供了和Spring框架的各項特性相似的,以Spring XML的命名空間的方式配置RedissonClient實例和它所支持的全部對象和服務;
  2. Redisson完整的實現了Spring框架裏的緩存機制;
  3. Redisson在Redis的基礎上實現了Java緩存標準規範;
  4. Redisson爲Apache Tomcat集羣提供了基於Redis的非黏性會話管理功能。該功能支持Apache Tomcat的六、7和8版。
  5. Redisson還提供了Spring Session會話管理器的實現。

 

4  spring boot 整合 Redissonapi

  1. pom
    <dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.10.6</version>
    </dependency>

  2. properties
    spring:      
      redisson:
        enabled: true
        cluster: false
        nodes: x.x.x.x:x
        password: xxxx

     

  3. redisson配置類RedissonConfig
    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;
        }
    
    }

     

  4. redisson配置類RedissonCondition
    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);
        }
    }

     

  5. redisson配置類RedissonProperties
    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;
    
    }
相關文章
相關標籤/搜索