首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jedis支持异步操作吗?

Jedis支持异步操作吗?
EN

Stack Overflow用户
提问于 2012-07-05 06:35:33
回答 3查看 4.8K关注 0票数 5

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

在java中做这件事的最好方法是什么?

其中一种方法是创建3个线程,并在每个线程中(同步)进行"get“(读取)。等待所有三个命令完成,然后组合结果。

Jedis是否有异步发出3 "gets“(任何相关命令)的机制,并具有回调功能?

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

普通的Jedis管道(jedis/test/管线iningTest.java)只向单个Redis实例发送多个命令,以便在Redis服务器上一个接一个地执行这些命令(以及最后可用的所有响应)。

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

EN

回答 3

Stack Overflow用户

发布于 2012-07-05 11:03:49

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

票数 2
EN

Stack Overflow用户

发布于 2012-08-01 15:16:33

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

票数 0
EN

Stack Overflow用户

发布于 2015-02-19 05:07:00

到2015年2月为止,Jedis显然不支持根据需要对单个redis实例进行异步操作:https://github.com/xetorthio/jedis/issues/241

在您的情况下,我要做的是继续使用3个线程,并按照上面的@Xorlev建议继续执行服务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11338936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档