做网站的如何兼职学创杯营销之道模板
2026/4/1 7:09:58 网站建设 项目流程
做网站的如何兼职,学创杯营销之道模板,开发一个微信公众号多少钱,制作个人网页的过程一.背景 最近在搭建一个新项目#xff0c;本着有新用新的原则#xff0c;项目选择到了jdk17SpringBoot3.4。但是在测试Redis连接的时候却遇到了以下问题#xff1a; redis连不上了。于是我先去检查了配置文件的连接信息#xff0c;发现没问题#xff1b;再去检查配置类本着有新用新的原则项目选择到了jdk17SpringBoot3.4。但是在测试Redis连接的时候却遇到了以下问题redis连不上了。于是我先去检查了配置文件的连接信息发现没问题再去检查配置类也没发现问题。并且我去启动了以前用SpringBoot2.X的老项目发现同样的配置下以前的老项目就能成功连上Redis。那这下就大概可以确定原因了SpringBoot3.4版本下引用的spring-boot-starter-data-redis可能有点毛病。二.发现问题1.问题发现既然可能是版本问题那就只能去github上看看了果然也有其它人遇到了相同的问题不过还好这个问题已经被解决了翻译一下就是Lettuce驱动程序版本在Spring Data和Spring Boot版本之间发生了变化这些版本改变了握手行为。我建议您通过clientOptions.builder(). protocolversion (ProtocolVersion.RESP2).build来配置LettuceClientConfiguration.clientOptions来强制RESP2处理这样你就不会遇到HELLO错误并且将使用AUTH命令来应用身份验证。看起来Lettuce客户端已经通过redis/ Lettuce #3035修复了6.5版本的问题。在任何情况下这都是驱动程序的问题。据此可以得到两种解决方案1手动配置LettuceClientConfiguration.clientOptions的protocolversion2将Lettuce升级到6.52.问题验证我的“spring-boot-starter-data-redis”版本是跟着springboot版本走的也就是3.4.0接下来看一下“spring-boot-starter-data-redis”提供的lettuce依赖可以看到lettuce依赖版本默认是6.4.1而不是已经解决bug的6.5。接下来对程序debug验证一下lettuce版本为6.4.1时LettuceClientConfiguration.clientOptions的protocolversion可以看到Spring为我们自动配置的RedisConnectionFactory中clientOptions的protocolVersion属性为null没有被设置为RESP2。三.解决方案1.手动配置LettuceClientConfiguration.clientOptions的protocolversion我们不使用Spring为我们自动配置的RedisConnectionFactory而是自己配置一个LettuceConnectionFactory交给IOC容器管理。在配置LettuceConnectionFactory时通过配置ClientOptions的protocolVersion为RESP2来解决连接bug。1配置代码自己配置LettuceConnectionFactory的话还需要引入外部连接池依赖dependency groupIdorg.apache.commons/groupId artifactIdcommons-pool2/artifactId /dependency /** * 配置线程池连接工厂LettuceConnectionFactory * return */ Bean public LettuceConnectionFactory lettuceConnectionFactory(){ // redis配置 RedisStandaloneConfiguration redisStandaloneConfiguration new RedisStandaloneConfiguration(host, port); redisStandaloneConfiguration.setDatabase(dataBase); redisStandaloneConfiguration.setPassword(password); // 连接池配置 GenericObjectPoolConfig genericObjectPoolConfig new GenericObjectPoolConfig(); genericObjectPoolConfig.setMinIdle(minIdle); genericObjectPoolConfig.setMaxIdle(maxIdle); genericObjectPoolConfig.setMaxWait(Duration.ofDays(maxWait)); genericObjectPoolConfig.setMaxTotal(maxActive); // ClientOptions配置 ClientOptions clientOptions ClientOptions.builder().protocolVersion(ProtocolVersion.RESP2).build(); // redis客户端配置 LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder LettucePoolingClientConfiguration .builder() .clientOptions(clientOptions) .commandTimeout(Duration.ofMillis(timeOut)); builder.poolConfig(genericObjectPoolConfig); LettuceClientConfiguration lettuceClientConfiguration builder.build(); return new LettuceConnectionFactory(redisStandaloneConfiguration,lettuceClientConfiguration); }2启动验证可以看到此时注入进来的RedisConnectionFactory就是我们自己配置的LettuceConnectionFactory其ClientOptions的protocolVersion属性为RESP2。Redis可以被正常连接。2.将Lettuce升级到6.5这种方法就比较简单粗暴了既然“spring-boot-starter-data-redis”提供的lettuce依赖版本为6.4那我们就不用它提供的了自己引入版本为6.5的lettuce依赖。1配置代码!--redis-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId exclusions exclusion groupIdio.lettuce/groupId artifactIdlettuce-core/artifactId /exclusion /exclusions /dependency !--lettuce-- dependency groupIdio.lettuce/groupId artifactIdlettuce-core/artifactId version${lettuce.version}/version /dependency !--外部连接池-- dependency groupIdorg.apache.commons/groupId artifactIdcommons-pool2/artifactId /dependency其中lettuce.version是6.5.0.RELEASE。最下面的“commons-pool2”是如果要自己配置LettuceConnectionFactory才需要引入也就是方案一要用到这里没有删掉。2启动验证IOC容器中的Spring为我们自动配置的RedisConnectionFactory的clientOptions.protocolVersion仍然是null但是此时Redis已经可以正常连接上了说明Lettuce 6.5.0已经解决了认证连接bug。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询