更新时间:2022-08-16 GMT+08:00
如何解决Lettuce 6.x版本客户端使用DCS实例兼容性问题?
问题现象
使用Lettuce 6.x版本客户端,连接DCS的Redis Proxy(4.x/5.x)集群,会报错"NOAUTH Authentication required"。
图1 报错示例
问题分析
Lettuce 6.x版本开始,使用RESP3(Redis 6.x引入)的HELLO命令进行版本自适应判断,但是对于不支持HELLO命令的低版本实例,兼容性存在一定问题。所以对于低版本的实例,建议直接在Lettuce中指定使用RESP2协议(兼容Redis 4/5)的版本来使用。
解决方案
添加一段代码,指定RESP2协议访问Redis即可解决:
package com.chinaroad.parking.config;
import io.lettuce.core.ClientOptions;
import io.lettuce.core.protocol.ProtocolVersion;
import org.springframework.boot.autoconfigure.data.redis.LettuceClientConfigurationBuilderCustomizer;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
@Configuration
public class SpringConfig implements LettuceClientConfigurationBuilderCustomizer {
@Override
public void customize(LettuceClientConfiguration.LettuceClientConfigurationBuilder clientConfigurationBuilder) {
// manually specifying RESP2
clientConfigurationBuilder.clientOptions(ClientOptions.builder()
.protocolVersion(ProtocolVersion.RESP2)
.build());
}
}
父主题: 客户端和网络连接