1 概述node
Redisson實現了分佈式和可擴展的Java數據結構,功能較爲簡單,不支持字符串操做,不支持排序、事務、管道、分區等Redis特性。Redisson的宗旨是促進使用者對Redis的關注分離,從而讓使用者可以將精力更集中地放在處理業務邏輯上。redis
2 特色spring
- Redisson中的方法則是進行比較高的抽象,每一個方法調用可能進行了一個或多個Redis方法調用。
- Redisson使用非阻塞的I/O和基於Netty框架的事件驅動的通訊層,其方法調用是異步的。Redisson的API是線程安全的,因此能夠操做單個Redisson鏈接來完成各類操做。
- 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
- Redisson提供了和Spring框架的各項特性相似的,以Spring XML的命名空間的方式配置RedissonClient實例和它所支持的全部對象和服務;
- Redisson完整的實現了Spring框架裏的緩存機制;
- Redisson在Redis的基礎上實現了Java緩存標準規範;
- Redisson爲Apache Tomcat集羣提供了基於Redis的非黏性會話管理功能。該功能支持Apache Tomcat的六、7和8版。
- Redisson還提供了Spring Session會話管理器的實現。
4 spring boot 整合 Redissonapi
- pom
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.10.6</version>
</dependency> - properties
spring: redisson: enabled: true cluster: false nodes: x.x.x.x:x password: xxxx
- 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; } }
- 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); } }
- 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; }