繁体   English   中英

Jedis是否支持异步操作

[英]Does Jedis support async operations

我正在使用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”一起使用。

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

在此之前,您可以使用带有三个Jedis实例的ExecutorService自行滚动它,然后等待返回的期货。

到2015年2月,Jedis显然不支持在一个redis实例上进行Async操作,因为你需要: https//github.com/xetorthio/jedis/issues/241

在我的案例中,我会做的是继续3个主题并继续使用Futures和Executor Service,如上面提到的@Xorlev。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM