我正在使用 Jedis(Java 客户端)与 Redis 服务器通信。我有 3 个 Redis 实例在三个不同的节点上运行。我想从 3 个 Redis 实例中“获取”(读取)一些记录。我想并行发出这些“获取”(读取),然后对接收到的数据进行一些处理并形成最终输出。
在java中执行此操作的最佳方法是什么?
一种方法是创建 3 个线程并在每个线程中(同步)发出“get”(读取)。等待所有 3 个命令完成,然后合并结果。
Jedis 是否具有异步发出 3 个“获取”(与此相关的任何命令)的机制,并带有回调功能?
我有 3 个不同的 Redis 实例。那么您是否建议使用“ShardedJedisPipeline”(jedis/tests/ShardedJedisPipelineTest.java)与这些 Redis 实例并行交互?
普通的 Jedis 管道 (jedis/tests/PipeliningTest.java),只是将多个命令发送到单个 Redis 实例,以便它们在 Redis 服务器上一个接一个地执行(以及最后可用的所有响应)。
所以我假设我必须使用“ShardedJedisPipeline”。但这有两个限制: 1. 我想在 3 个 Redis 实例上并行执行 Lua 脚本,即“eval”。2. 我不希望分片(Jedis 使用的一些哈希算法)分发数据或自己(使用它的算法)从实例中读取数据。我们有不同的数据分发策略。所以我希望能够指定一条记录应该存储在哪个redis实例中,并相应地从哪里读取它。keyTags 似乎提供了这种机制,但不确定如何将其与“eval”一起使用。