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