java - 引起:io.lettuce.core.RedisCommandExecutionException: MOVED 8731 172.19.122.164:6379
问题描述
我们有一个 spring-boot 应用程序,它部署到 AWS 的 EC2 实例中包含的 tomcat。在本地我有 redis 设置。在我的 application.yml 中,我的 redis 配置如下所示:
redis:
enabled: true
clusterNodes: localhost:6379
properties:
lockExpiryMillis: 3000
lockRetryAttempts: 3
lockRetryWaitMillis: 50
我们在java中配置它,如下所示:
{
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(clusterNodes.get(0).split(":")[0]);
return new LettuceConnectionFactory(config);
}
RedisClusterConfiguration config = new RedisClusterConfiguration(clusterNodes);
而我在 QA 中的集群负载均衡器 url 如下所示:
aq************amazonaws.com:6379 实际上隐藏了所有的 redis 集群。
我在本地使用此配置进行了测试......也使用了 QA url。
但是不断得到异常
引起:io.lettuce.core.RedisCommandExecutionException: MOVED 8731 172.19.122.164:6379
注意:版本和属性都很好,因为它在本地工作,没有任何例外
解决方案
所以这个问题实际上很傻......当计数为1时我正在配置RedisStandaloneConfiguration......虽然在我的情况下我没有得到实际的redis URL,而是我只是得到本地平衡器单个redis url。
在 QA 中,当我用实际分隔的 更新 redis url 时,它工作正常,意味着没有原因:io.lettuce.core.RedisCommandExecutionException。
因为我们应该使用负载均衡器 url 而不是实际的,所以我必须更新代码以在独立模式下启动 redis,只有当它是本地主机时(因为当然集群没有配置),而在所有其他时间我都在启动它RedisCluster 配置。
更改的代码部分:
if(clusterNodes.contains("localhost"))
{
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("localhost");
return new LettuceConnectionFactory(config);
}
RedisClusterConfiguration config = new RedisClusterConfiguration(Arrays.asList(clusterNodes));
推荐阅读
- php - 将 Wordpress 中的 JSON 链接读入表格
- javascript - 在数组内映射数组
- c++ - 从别名模板中提取模板参数的值
- c++ - 我正在尝试从文本文件中读取并将它们分类为不同的结构成员,但我不知道哪里出错了
- javascript - Slonik 通过 sql 标签动态插入查询
- python - python sqlite - 条件为空
- python - 如何替换 tkinter 中的文本/图像?
- java - BufferedReader 超时
- compiler-errors - 以下 Fortran 代码有什么问题?(gfortran) (1) 处的 DTIO 虚拟参数必须是 ASSUMED SHAPE ARRAY
- java - 如何使用 Java 中的 YouTube API 检查 YouTube 视频是否存在?