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>mons-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的方法是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注主机评测网行业资讯频道。
下一篇:C++特殊类设计概念是什么
声卡驱动正常但是没有声音如何办?声卡驱动正常没声音的解决方法
英伟达显卡驱动如何退回到原来版本?英伟达显卡驱动退回到原来版
重装系统,电脑只有一个C盘如何创建分区
Defender提示错误应用程序MsMpEng.exe无法启动
电脑无法启动或仍在加载如何办?电脑无法启动或仍在加载的解决方
打印机驱动如何卸载删除?卸载打印机驱动干净的教程
电脑没网如何安装网卡驱动?教你没网如何安装网卡驱动的方法
系统32位和62位如何选择:详解它们之间的差异
电脑文件删不掉如何办?四种方法解决
任务管理器快捷键有哪些?任务管理器快捷键大全