Springboot整合lettuce密码错误Caused by: io.lettuce.core.RedisCommandExecutionException: NOAUTH Authenticat

参考:

Springboot整合lettuce密码错误io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication require_hanyi_的专栏-程序员秘密 - 程序员秘密 (cxymm.net)

开发环境:

  • springboot 2.4.5
  • spring-boot-starter-data-redis 2.4.5
  • redis 4.1
  • lettuce 6.1.4

解决办法:

        <!-- redis -->
        <!--        lettuce6.x 连接redis,加auth的时候有bug-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
            <version>5.3.7.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <!-- 要用redis连接池 必须有pool依赖-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.5.0</version>
        </dependency>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用[1]中的错误信息"Caused by: io.lettuce.core.RedisCommandExecutionException: MOVED 15592 192.168.199.128:7002"表示在执行Redis命令时发生了MOVED错误。这个错误通常是由于Redis集群的重新分片或节点迁移引起的。当Redis集群中的某个键被移动到另一个节点时,客户端可能会收到MOVED错误作为响应。 要解决这个问题,你可以采取以下步骤: 1. 检查你的Redis集群配置,确保所有节点的配置正确,并且集群中的主节点和从节点都正常运行。 2. 检查你的应用程序代码,确保它正确处理MOVED错误。当你收到MOVED错误时,你的应用程序应该能够重新定位到正确的节点并重新发送命令。 3. 如果你使用的是Lettuce作为Redis客户端,你可以使用Lettuce提供的RedisClusterClient和RedisClusterCommands来处理MOVED错误。这些类库会自动处理MOVED错误,并将命令重新发送到正确的节点。 下面是一个使用Lettuce处理MOVED错误的示例代码: ```java import io.lettuce.core.RedisClient; import io.lettuce.core.RedisURI; import io.lettuce.core.cluster.RedisClusterClient; import io.lettuce.core.cluster.api.StatefulRedisClusterConnection; import io.lettuce.core.cluster.api.sync.RedisClusterCommands; public class RedisClusterExample { public static void main(String[] args) { RedisURI redisURI = RedisURI.create("redis://192.168.199.128:7002"); RedisClusterClient redisClusterClient = RedisClusterClient.create(redisURI); StatefulRedisClusterConnection<String, String> connection = redisClusterClient.connect(); RedisClusterCommands<String, String> commands = connection.sync(); String key = "your_key"; String value = "your_value"; try { commands.set(key, value); } catch (io.lettuce.core.RedisCommandExecutionException e) { if (e.getMessage().startsWith("MOVED")) { // 解析MOVED错误中的新节点信息 String[] movedInfo = e.getMessage().split(" "); String newHost = movedInfo[2].split(":")[0]; int newPort = Integer.parseInt(movedInfo[2].split(":")[1]); // 更新RedisURI并重新连接到新节点 redisURI.setHost(newHost); redisURI.setPort(newPort); connection = redisClusterClient.connect(redisURI); commands = connection.sync(); // 重新发送命令 commands.set(key, value); } else { // 处理其他类型的Redis命令执行异常 e.printStackTrace(); } } connection.close(); redisClusterClient.shutdown(); } } ``` 请注意,上述代码仅为示例,你需要根据你的实际情况进行适当的修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值