簡體   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