SpringBoot集成Lettuce连接Redis的方法是什么


这篇“SpringBoot集成Lettuce连接Redis的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot集成Lettuce连接Redis的方法是什么”文章吧。

首先使用maven在pom.xml添加如下依赖

说明:

  • SpringBoot从2.0起默认使用lettuce客户端进行连接。

  • 此次使用的版本:springboot:2.6.6,lettuce:6.1.8。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

使用SpringBoot集成Lettuce连接实例

Springboot+Lettuce单连方式连接Redis单机/主备/Proxy集群示例。

1、在application.properties配置文件中加上redis相关配置。
spring.redis.host=hostspring.redis.database=0spring.redis.password=pwdspring.redis.port=port
2、Redis配置类RedisConfiguration。
@BeanpublicRedisTemplate<String,Object>redisTemplate(LettuceConnectionFactorylettuceConnectionFactory){RedisTemplate<String,Object>template=newRedisTemplate<>();template.setConnectionFactory(lettuceConnectionFactory);//使用Jackson2JsonRedisSerializer替换默认的JdkSerializationRedisSerializer来序列化和反序列化redis的value值Jackson2JsonRedisSerializer<Object>jackson2JsonRedisSerializer=newJackson2JsonRedisSerializer<>(Object.class);ObjectMappermapper=newObjectMapper();mapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL,JsonTypeInfo.As.PROPERTY);jackson2JsonRedisSerializer.setObjectMapper(mapper);StringRedisSerializerstringRedisSerializer=newStringRedisSerializer();//key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);//hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);//value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);//hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();returntemplate;}
3、Redis操作类RedisUtil。
/***普通缓存获取*@paramkey键*@return值*/publicObjectget(Stringkey){returnkey==null?null:redisTemplate.opsForValue().get(key);}/***普通缓存放入*@paramkey键*@paramvalue值*@returntrue成功false失败*/publicbooleanset(Stringkey,Objectvalue){try{redisTemplate.opsForValue().set(key,value);returntrue;}catch(Exceptione){e.printStackTrace();returnfalse;}}
4、编写controller类进行测试。
@RestControllerpublicclassHelloRedis{@AutowiredRedisUtilredisUtil;@RequestMapping("/setParams")@ResponseBodypublicStringsetParams(Stringname){redisUtil.set("name",name);return"success";}@RequestMapping("/getParams")@ResponseBodypublicStringgetParams(Stringname){System.out.println("--------------"+name+"-------------");StringretName=redisUtil.get(name)+"";returnretName;}}

SpringBoot+Lettuce连接池方式连接Redis单机/主备/Proxy集群示例。

1、在上边maven依赖的基础上添加以下依赖。
<dependency><groupId>org.apachemons</groupId><artifactId&gtmons-pool2</artifactId></dependency>
2、在application.properties配置文件中加上redis相关配置。
spring.redis.host=hostspring.redis.database=0spring.redis.password=pwdspring.redis.port=port#连接超时时间spring.redis.timeout=1000#连接池最大连接数(使用负值表示没有限制)spring.redis.lettuce.pool.max-active=50#连接池中的最小空闲连接spring.redis.lettuce.pool.min-idle=5#连接池中的最大空闲连接spring.redis.lettuce.pool.max-idle=50#连接池最大阻塞等待时间(使用负值表示没有限制)spring.redis.lettuce.pool.max-wait=5000#eviction线程调度时间间隔spring.redis.pool.time-between-eviction-runs-millis=2000

这里最后的这个配置:spring.redis.pool.time-between-eviction-runs-millis=2000 在某些版本中会不生效,需要自己DEBUG看一下

LettuceConnectionFactory

实例里边有没设置成功,如果没有则调整成如下配置:

spring.redis.lettuce.pool.time-between-eviction-runs=2000

3、Redis连接配置类RedisConfiguration。
@BeanpublicRedisTemplate<String,Object>redisTemplate(LettuceConnectionFactorylettuceConnectionFactory){lettuceConnectionFactory.setShareNativeConnection(false);RedisTemplate<String,Object>template=newRedisTemplate<>();template.setConnectionFactory(lettuceConnectionFactory);//使用Jackson2JsonRedisSerializer替换默认的JdkSerializationRedisSerializer来序列化和反序列化redis的value值Jackson2JsonRedisSerializer<Object>jackson2JsonRedisSerializer=newJackson2JsonRedisSerializer<>(Object.class);ObjectMappermapper=newObjectMapper();mapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL,JsonTypeInfo.As.PROPERTY);jackson2JsonRedisSerializer.setObjectMapper(mapper);StringRedisSerializerstringRedisSerializer=newStringRedisSerializer();//key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);//hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);//value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);//hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();returntemplate;}

SpringBoot+Lettuce单连接方式连接Redis Cluster集群代码示例。

1、在application.properties配置文件中加上redis相关配置。
spring.redis.cluster.nodes=host:portspring.redis.cluster.max-redirects=3spring.redis.password=pwd#自动刷新时间spring.redis.lettuce.cluster.refresh.period=60#开启自适应刷新spring.redis.lettuce.cluster.refresh.adaptive=truespring.redis.timeout=60
2、Redis配置类RedisConfiguration,请务必开启集群自动刷新拓扑配置。
@BeanpublicLettuceConnectionFactorylettuceConnectionFactory(){String[]nodes=clusterNodes.split(",");List<RedisNode>listNodes=newArrayList();for(Stringnode:nodes){String[]ipAndPort=node.split(":");RedisNoderedisNode=newRedisNode(ipAndPort[0],Integer.parseInt(ipAndPort[1]));listNodes.add(redisNode);}RedisClusterConfigurationredisClusterConfiguration=newRedisClusterConfiguration();redisClusterConfiguration.setClusterNodes(listNodes);redisClusterConfiguration.setPassword(password);redisClusterConfiguration.setMaxRedirects(maxRedirects);//配置集群自动刷新拓扑ClusterTopologyRefreshOptionstopologyRefreshOptions=ClusterTopologyRefreshOptions.builder().enablePeriodicRefresh(Duration.ofSeconds(period))//按照周期刷新拓扑.enableAllAdaptiveRefreshTriggers()//根据事件刷新拓扑.build();ClusterClientOptionsclusterClientOptions=ClusterClientOptions.builder()//redis命令超时时间,超时后才会使用新的拓扑信息重新建立连接.timeoutOptions(TimeoutOptions.enabled(Duration.ofSeconds(period))).topologyRefreshOptions(topologyRefreshOptions).build();LettuceClientConfigurationclientConfig=LettucePoolingClientConfiguration.builder()mandTimeout(Duration.ofSeconds(timeout)).readFrom(ReadFrom.REPLICA_PREFERRED)//优先从副本读取.clientOptions(clusterClientOptions).build();LettuceConnectionFactoryfactory=newLettuceConnectionFactory(redisClusterConfiguration,clientConfig);returnfactory;}@BeanpublicRedisTemplate<String,Object>redisTemplate(LettuceConnectionFactorylettuceConnectionFactory){RedisTemplate<String,Object>template=newRedisTemplate<>();template.setConnectionFactory(lettuceConnectionFactory);//使用Jackson2JsonRedisSerializer替换默认的JdkSerializationRedisSerializer来序列化和反序列化redis的value值Jackson2JsonRedisSerializer<Object>jackson2JsonRedisSerializer=newJackson2JsonRedisSerializer<>(Object.class);ObjectMappermapper=newObjectMapper();mapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL,JsonTypeInfo.As.PROPERTY);jackson2JsonRedisSerializer.setObjectMapper(mapper);StringRedisSerializerstringRedisSerializer=newStringRedisSerializer();//key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);//hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);//value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);//hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();returntemplate;}

springboot+lettuce连接池方式连接Redis Cluster集群代码示例。

1、在application.properties配置文件中加上Redis相关配置。
spring.redis.cluster.nodes=host:portspring.redis.cluster.max-redirects=3spring.redis.password=pwdspring.redis.lettuce.cluster.refresh.period=60spring.redis.lettuce.cluster.refresh.adaptive=true#连接超时时间spring.redis.timeout=60s#连接池最大连接数(使用负值表示没有限制)spring.redis.lettuce.pool.max-active=50#连接池中的最小空闲连接spring.redis.lettuce.pool.min-idle=5#连接池中的最大空闲连接spring.redis.lettuce.pool.max-idle=50#连接池最大阻塞等待时间(使用负值表示没有限制)spring.redis.lettuce.pool.max-wait=5000#eviction线程调度时间间隔spring.redis.lettuce.pool.time-between-eviction-runs=2000
2、redis配置类RedisConfiguration,请务必开启集群自动刷新拓扑配置。
@BeanpublicLettuceConnectionFactorylettuceConnectionFactory(){GenericObjectPoolConfiggenericObjectPoolConfig=newGenericObjectPoolConfig();genericObjectPoolConfig.setMaxIdle(maxIdle);genericObjectPoolConfig.setMinIdle(minIdle);genericObjectPoolConfig.setMaxTotal(maxActive);genericObjectPoolConfig.setMaxWait(Duration.ofMillis(maxWait));genericObjectPoolConfig.setTimeBetweenEvictionRuns(Duration.ofMillis(timeBetweenEvictionRunsMillis));String[]nodes=clusterNodes.split(",");List<RedisNode>listNodes=newArrayList();for(Stringnode:nodes){String[]ipAndPort=node.split(":");RedisNoderedisNode=newRedisNode(ipAndPort[0],Integer.parseInt(ipAndPort[1]));listNodes.add(redisNode);}RedisClusterConfigurationredisClusterConfiguration=newRedisClusterConfiguration();redisClusterConfiguration.setClusterNodes(listNodes);redisClusterConfiguration.setPassword(password);redisClusterConfiguration.setMaxRedirects(maxRedirects);//配置集群自动刷新拓扑ClusterTopologyRefreshOptionstopologyRefreshOptions=ClusterTopologyRefreshOptions.builder().enablePeriodicRefresh(Duration.ofSeconds(period))//按照周期刷新拓扑.enableAllAdaptiveRefreshTriggers()//根据事件刷新拓扑.build();ClusterClientOptionsclusterClientOptions=ClusterClientOptions.builder()//redis命令超时时间,超时后才会使用新的拓扑信息重新建立连接.timeoutOptions(TimeoutOptions.enabled(Duration.ofSeconds(period))).topologyRefreshOptions(topologyRefreshOptions).build();LettuceClientConfigurationclientConfig=LettucePoolingClientConfiguration.builder()mandTimeout(Duration.ofSeconds(timeout)).poolConfig(genericObjectPoolConfig).readFrom(ReadFrom.REPLICA_PREFERRED)//优先从副本读取.clientOptions(clusterClientOptions).build();LettuceConnectionFactoryfactory=newLettuceConnectionFactory(redisClusterConfiguration,clientConfig);returnfactory;}@BeanpublicRedisTemplate<String,Object>redisTemplate(LettuceConnectionFactorylettuceConnectionFactory){lettuceConnectionFactory.setShareNativeConnection(false);RedisTemplate<String,Object>template=newRedisTemplate<>();template.setConnectionFactory(lettuceConnectionFactory);//使用Jackson2JsonRedisSerializer替换默认的JdkSerializationRedisSerializer来序列化和反序列化redis的value值Jackson2JsonRedisSerializer<Object>jackson2JsonRedisSerializer=newJackson2JsonRedisSerializer<>(Object.class);ObjectMappermapper=newObjectMapper();mapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL,JsonTypeInfo.As.PROPERTY);jackson2JsonRedisSerializer.setObjectMapper(mapper);StringRedisSerializerstringRedisSerializer=newStringRedisSerializer();//key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);//hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);//value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);//hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();returntemplate;}

以上就是关于“SpringBoot集成Lettuce连接Redis的方法是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注主机评测网行业资讯频道。


上一篇:wordpress数据表结构和字段有哪些

下一篇:C++特殊类设计概念是什么


Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器