我正在使用Jedis(Java客户端)与Redis服务器进行通信。我有3个Redis实例在三个不同的节点上运行。我想从3个Redis实例中“获取”(读取)一些记录。我想并行发出这些“gets”(读取),然后对接收到的数据进行一些处理并形成最终输出。

用Java做到这一点的最佳方法是什么?

一种方法是创建3个线程,并在每个线程中(同步)发出“get”(读取)消息。等待所有3条命令完成,然后合并结果。

Jedis是否具有通过回调功能异步发出3个“gets”(与此相关的任何命令)的机制?

我有3个不同的Redis实例。那么,您是否建议使用“ShardedJedisPipeline”(jedis/tests/ShardedJedisPipelineTest.java)与这些Redis实例进行并行交互?

普通的Jedis Pipeline(jedis/tests/PipeliningTest.java)只是向单个Redis实例发送多个命令,因此它们在Redis服务器上一个接一个地执行(最后所有响应可用)。

因此,我假设我必须使用“ShardedJedisPipeline”。但这有两个限制:
1.我想在3个Redis实例上并行执行Lua脚本,即“eval”。
2.我不希望分片(Jedis使用某种哈希算法)来分发数据或自行(使用其算法)从实例读取数据。我们有不同的数据分发策略。因此,我希望能够指定一条记录,该记录应存储在redis实例中,并相应地从该位置读取它。 keyTags似乎提供了这种机制,但不确定如何将其与“eval”一起使用。

最佳答案

您可以使用提到的管道。
AsyncJedis是一项进步,将与下一版本的Jedis一起发布。它将基于netty并与vert.x兼容

关于java - Jedis是否支持异步操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11338936/

10-15 10:02