如何使用 jedis for Java 连接 Docker Redis 集群实例?

2023-12-30

我使用 redis docker-compose 创建了一个包含 6 个节点的集群(3 个主节点和 3 个从节点),并将所有节点链接起来。 集群信息

cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:5
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:23
cluster_stats_messages_pong_sent:31
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:55
cluster_stats_messages_ping_received:26
cluster_stats_messages_pong_received:24
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:55

集群节点

d794a9ab002f0c3cb699ce68a09310dd0fdb17de 192.168.65.3:32789@32783 slave c6c05515c3be01a1438b6d2aad823c0fa50b1743 0 1586629088989 5 connected
7d4fab850bcfac8754a559c5e9469698b7f182bc 192.168.65.3:32792@32787 master - 0 1586629087000 2 connected 5461-10922
c6c05515c3be01a1438b6d2aad823c0fa50b1743 192.168.65.3:32793@32788 master - 0 1586629089995 4 connected 10923-16383
229b9b4f919f79a1c24b7b849c42acb9e3378532 192.168.65.3:32790@32785 slave 9b649a67dc53084ed7416b20e8bab00289e636d2 0 1586629089000 6 connected
9b649a67dc53084ed7416b20e8bab00289e636d2 192.168.65.3:32791@32786 myself,master - 0 1586629086000 1 connected 0-5460

如上所示,集群似乎正在工作,但是当我尝试使用代码使用 jedis 调用 java 应用程序中的集群实例时

jedis = new JedisCluster(new HostAndPort("0.0.0.0", 32790));
jedis.set("events/city/rome", "32,15,223,828");

然后我得到以下错误

Exception in thread "main" redis.clients.jedis.exceptions.JedisClusterMaxAttemptsException: No more cluster attempts left.
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:86)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
    at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:25)
    at redis.clients.jedis.JedisCluster.set(JedisCluster.java:112)
    at sc.dev.algordf.ALGORDF.main(ALGORDF.java:53)

请帮我找出可能是什么问题。是不是因为我在创建jedis实例时没有指定正确的IP和端口号。或者是我缺少的东西。

Thanks.


问题出在 Redis 集群配置中!

您的应用程序请求已配置的节点之一。它接收所有 Redis 节点的地址,在您的例子中是 Docker 网络中的 IP。结果,您会收到连接错误。

要解决此问题,请将以下参数添加到集群中的每个节点以更新“通告”地址

带节点的示例192.168.83.101:7000:17000(docker主机是192.168.83.101,命令端口为7000,集群总线端口为17000)

cluster-announce-ip 192.168.83.100
cluster-announce-port 7000
cluster-announce-bus-port 17000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 jedis for Java 连接 Docker Redis 集群实例? 的相关文章

随机推荐

  • C# 中 C++ const size_t 的等效项是什么?

    我正在尝试将一些 Ogre 代码转换为 C 版本 但遇到了一个问题 const size t nVertices 8 const size t vbufCount 3 2 nVertices float vertices vbufCount
  • 在Python中检查较长字符串中存在的模糊/近似子字符串?

    使用像leveinstein leveinstein或difflib 这样的算法 很容易找到近似匹配 gt gt gt import difflib gt gt gt difflib SequenceMatcher None amazing
  • 无法将 void* 动态转换为模板类

    我得到的确切错误是 无法将 object 类型为 void 动态转换为类型 class udDator int 源不是指向类的指针 这是在重写的运算符删除内部发生的 我正在尝试创建一个模板化内存管理类 它可以继承到任何其他类 通过引用管理内
  • Graphviz / PyGraphviz 中有向图的 NetworkX 风格弹簧模型布局

    NetworkX 主要用于图形分析 PyGraphviz 主要用于绘图 它们被设计为协同工作 然而 至少在一个方面 NetworkX 的图形绘制 通过 MatPlotLib 优于 PyGraphviz 的图形绘制 通过 Graphviz 即
  • Oracle 列别名中的双引号

    好吧 这是一个有点晦涩的问题 但希望有人能帮助我解决这个问题 我正在开发的系统构建了一个用于在存储过程中执行的动态 SQL 字符串 以及定义列别名的动态 SQL 的一部分 这些别名本身实际上是从用户生成的数据的另一个表中检索的值 因此 例如
  • 无限循环动画

    我正在尝试创建无限循环的动画 但遇到了一些麻烦 我正在使用这行代码 使我的视图 颤动 为红色 但是当我调用这一行时 它可以工作 但使我的用户界面无响应 UIView animateWithDuration 1 0f delay 0 0f o
  • 如何更改 Braintree 上的订阅期限?

    我想为我们使用 Braintree 的计费系统添加一些单元测试 但我不知道如何将订阅期从 1 个月 目前 Braintree 中的最小值 更改为 1 天 我等不及 1 个月来执行我的测试 有什么解决办法吗 我最近向 Braintree 支持
  • 如何检查哈希中是否存在特定密钥?

    我想检查会话哈希中是否存在 用户 密钥 我怎样才能做到这一点 请注意 我不想检查键的值是否为零 我只是想检查 用户 是否key存在 Hash s key 方法告诉您给定的密钥是否存在 session key user
  • 如果非最终字段的值可以更改,如何在匿名类中使用它们?

    我之前问过这个问题 但没有得到合适的答案 如果非最终字段的值可以更改 如何在匿名类中使用它们 class Foo private int i void bar i 10 Runnable runnable new Runnable publ
  • Fragment 变得可见时的侦听器

    我疯狂地尝试让 optionsMenu 为不同的视图提供不同的选项 如果在我的片段上调用 onResume 我可以让它工作 但事实并非如此 我有一个 SherlockFragmentActivity 它在 onCreate 期间添加一个 S
  • Task 与 C# 中的异步委托?

    我有这个简单的方法 static int Work string s return s Length 我可以用以下命令运行它 Task
  • 如何向属性添加方法?

    假设我创建一个具有属性的类 public class User private string userID public string UserID get return userID set userID value 我必须如何处理类和属
  • 通过魔术方法访问 PhpStorm 字段

    我已在 CodeIgniter 库文件夹中点燃了数据表库 库中的一些代码 class Datatables Global container variables for chained argument results protected
  • HTTP 处理程序加载错误

    我在 Asp Net 中成功添加并配置了 HttpHandlerWeb应用程序 但在尝试将相同的 HttpHandler 添加到 Asp Net 时遇到问题WebSite 我已经在 web config 中注册了它 我是否遗漏了一些东西 这
  • 参与开源项目最重要的一点是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 免责声明 我did检查其他似乎相关的问题 但是这个问题更广泛且不太具体 其目标也完全不同 因此 请在删除之前先阅读 现在 虽然有 如何以聪明的方
  • Stream 的头部到底什么时候被评估?

    通常如果你创建一个Stream对象 头部将被急切地求值 scala gt Stream println evaluating 1 1 2 3 evaluating 1 res63 scala collection immutable Str
  • 当 JVM 终止时会发生什么?

    当 JVM 终止时会发生什么System exit 0 or C或者类似的东西 我读到诸如 进程被吹走 和 每个线程都停止 之类的内容 但我想知道到底发生了什么 我已经知道有shutdownHook以某种方式仍然会被执行 但是在调用 shu
  • 查找并替换某个范围内所有出现的字符串

    我想基本上模拟 VBA 中 Excel 中的替换所有功能 并将字符串 03 01 2018 在本工作簿中存在 10 次 替换为 01 03 2017 我已经弄清楚如何在一次出现时执行此操作 但是不是范围内的所有出现 有类似 findnext
  • 类型“AngularFireUploadTask”上不存在属性“downloadURL”

    我的线路有问题 this downloadURL 任务 downloadURL 使用 AngularFireUploadTask 即使我导入了它 import Component OnInit from angular core impor
  • 如何使用 jedis for Java 连接 Docker Redis 集群实例?

    我使用 redis docker compose 创建了一个包含 6 个节点的集群 3 个主节点和 3 个从节点 并将所有节点链接起来 集群信息 cluster state ok cluster slots assigned 16384 c