io.lettuce.core.RedisCommandExecutionException: MOVED 8718 192.168.93.130:6380 异常问题的解决

一般情况下, 都是由于application配置文件中没有配置集群节点
配置上自己集群的所有节点即可正常运行
spring.redis.cluster.nodes=192.168.93.130:6379,192.168.93.130:6380,192.168.93.130:6381,192.168.93.130:6389,192.168.93.130:6390,192.168.93.130:6391**

#Redis服务器地址
spring.redis.host=192.168.93.130
#Redis服务器连接端口
spring.redis.port=6379
#Redis数据库索引(默认为0)
spring.redis.database= 0
#连接超时时间(毫秒)
spring.redis.timeout=1800000
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-wait=-1
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值