文档首页/ 分布式缓存服务 DCS/ 常见问题/ 客户端和网络连接/ 如何解决Lettuce 6.x版本客户端使用DCS实例兼容性问题?
更新时间: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());
    }

}