Jedis是否支持异步操作

sun*_*llp 5 java asynchronous redis jedis

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

在java中执行此操作的最佳方法是什么?

其中一种方法是创建3个线程并在每个线程中"获取"(读取)(同步).等待所有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"一起使用.

小智 2

您可以如上所述使用管道。AsyncJedis 是一项正在进行中的工作,将与下一版本的 Jedis 一起发布。它将基于netty并与vert.x兼容