Spring boot 整合 Redisson

1  概述

  Redisson实现了分布式和可扩展的Java数据结构,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。

2     特点

  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  第三方框架整合

  1. Redisson提供了和Spring框架的各项特性类似的,以Spring XML的命名空间的方式配置RedissonClient实例和它所支持的所有对象和服务;
  2. Redisson完整的实现了Spring框架里的缓存机制;
  3. Redisson在Redis的基础上实现了Java缓存标准规范;
  4. Redisson为Apache Tomcat集群提供了基于Redis的非黏性会话管理功能。该功能支持Apache Tomcat的6、7和8版。
  5. Redisson还提供了Spring Session会话管理器的实现。

4  spring boot 整合 Redisson

  1. pom


    <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.10.6</version> </dependency>
  2. properties

    1spring: 2 redisson: 3 enabled: true 4 cluster: false 5 nodes: x.x.x.x:x 6 password: xxxx
  3. redisson配置类RedissonConfig

    1package com.yx.redis.redisson; 2 3import lombok.extern.slf4j.Slf4j; 4import org.apache.commons.lang3.StringUtils; 5import org.redisson.Redisson; 6import org.redisson.api.RedissonClient; 7import org.redisson.config.ClusterServersConfig; 8import org.redisson.config.Config; 9import org.redisson.config.SingleServerConfig; 10import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 11import org.springframework.boot.context.properties.EnableConfigurationProperties; 12import org.springframework.context.annotation.Bean; 13import org.springframework.context.annotation.Conditional; 14import org.springframework.context.annotation.Configuration; 15import org.springframework.util.ObjectUtils; 16 17/** 18 * @Auther: yx 19 * @Date: 2019-04-30 15:55 20 * @Description: RedissonConfig 21 */ 22@Configuration 23@Conditional(RedissonCondition.class) 24@EnableConfigurationProperties({RedissonProperties.class}) 25@Slf4j 26public class RedissonConfig { 27 28 @Bean 29 public RedissonProperties getRedissonProperties() { 30 return new RedissonProperties(); 31 } 32 33 /** 34 * 单机模式自动装配 35 * @return 36 */ 37 @Bean 38 @ConditionalOnProperty(name="spring.redisson.cluster", havingValue = "false") 39 public RedissonClient getSingleRedisson() { 40 Config config = new Config(); 41 RedissonProperties redissonProperties = getRedissonProperties(); 42 43 String nodes = redissonProperties.getNodes(); 44 if (StringUtils.isEmpty(nodes)) { 45 throw new RuntimeException("nodes is not allow empty! please check your redis config"); 46 } 47 48 SingleServerConfig serverConfig = config.useSingleServer() 49 .setAddress("redis://" + nodes) 50 .setTimeout(redissonProperties.getTimeout()) 51 .setConnectionPoolSize(redissonProperties.getConnectionPoolSize()) 52 .setConnectionMinimumIdleSize(redissonProperties.getConnectionMinimumIdleSize()); 53 54 if(StringUtils.isNotBlank(redissonProperties.getPassword())) { 55 serverConfig.setPassword(redissonProperties.getPassword()); 56 } 57 58 log.info("init redisson success .... "); 59 60 return Redisson.create(config); 61 } 62 63 64 @Bean 65 @ConditionalOnProperty(name="spring.redisson.cluster", havingValue = "true") 66 public RedissonClient getClusterRedisson(){ 67 RedissonProperties redissonProperties = getRedissonProperties(); 68 69 String[] nodes = redissonProperties.getNodes().split(","); 70 if (ObjectUtils.isEmpty(nodes)) { 71 throw new RuntimeException("nodes is not allow empty! please check your redis config"); 72 } 73 74 for(int i=0;i<nodes.length;i++){ 75 nodes[i] = "redis://"+nodes[i]; 76 } 77 78 RedissonClient redisson = null; 79 Config config = new Config(); 80 ClusterServersConfig clusterServersConfig = config.useClusterServers() 81 .setScanInterval(2000) 82 .setTimeout(redissonProperties.getTimeout()) 83 .addNodeAddress(nodes); 84 85 if(StringUtils.isNotBlank(redissonProperties.getPassword())) { 86 clusterServersConfig.setPassword(redissonProperties.getPassword()); 87 } 88 89 redisson = Redisson.create(config); 90 91 log.info("init redisson cluster success .... "); 92 return redisson; 93 } 94 95}
  4. redisson配置类RedissonCondition

    1package com.yx.redis.redisson; 2 3import org.apache.commons.lang3.StringUtils; 4import org.springframework.context.annotation.Condition; 5import org.springframework.context.annotation.ConditionContext; 6import org.springframework.core.type.AnnotatedTypeMetadata; 7import org.springframework.util.ObjectUtils; 8 9/** 10 * @Auther: yx 11 * @Date: 2019-04-30 15:56 12 * @Description: RedissionCondition 13 */ 14public class RedissonCondition implements Condition { 15 @Override 16 public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 17 return propertyIsTrue(context, "spring.redisson.enabled"); 18 } 19 20 private static boolean propertyIsTrue(ConditionContext context, String key) { 21 return context.getEnvironment().getProperty(key, Boolean.TYPE, Boolean.FALSE); 22 } 23}
  5. redisson配置类RedissonProperties

    1package com.yx.redis.redisson; 2 3import lombok.Data; 4import org.springframework.boot.context.properties.ConfigurationProperties; 5 6/** 7 * @Auther: yx 8 * @Date: 2019-04-30 15:52 9 * @Description: RedissonProperties 10 */ 11@Data 12@ConfigurationProperties(prefix = "spring.redisson") 13public class RedissonProperties { 14 private int timeout = 3000; 15 16 private Boolean cluster; 17 18 private String nodes; 19 20 private String password; 21 22 private int database = 0; 23 24 private int connectionPoolSize = 64; 25 26 private int connectionMinimumIdleSize = 10; 27 28 private int slaveConnectionPoolSize = 250; 29 30 private int masterConnectionPoolSize = 250; 31 32}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )