Sto utilizzando Jedis (client java) per comunicare con il server Redis. Ho 3 istanze di Redis in esecuzione su tre nodi diversi. Voglio "ottenere" (leggi) alcuni record da 3 istanze di Redis. Voglio emettere questi "si" (legge) in parallelo, e poi fare un po 'di elaborazione sui dati ricevuti e formare un risultato finale.Jedis supporta le operazioni asincrone
Qual è il modo migliore per farlo in java?
Uno dei modi è creare 3 thread e isssue "get" (leggi) in ognuno di essi (in modo sincrono). Attendere il completamento di tutti e 3 i comandi e quindi combinare il risultato.
Jedis dispone di un meccanismo per l'emissione di 3 "ottiene" (qualsiasi comando per tale argomento) in modo asincrono, con una funzione di richiamata?
Ho 3 diverse istanze di Redis. Quindi suggerisci di usare "ShardedJedisPipeline" (jedis/tests/ShardedJedisPipelineTest.java) per interagire con queste istanze di Redis in parallelo?
Normal Jedis Pipeline (jedis/tests/PipeliningTest.java), invia semplicemente più comandi a una singola istanza di Redis in modo che vengano eseguiti uno dopo l'altro sul server Redis (e tutte le risposte disponibili alla fine).
Quindi presumo di dover utilizzare "ShardedJedisPipeline". Ma ci sono due limitazioni a questo: 1. Voglio eseguire lo script Lua, ad esempio "eval" su 3 istanze di Redis in parallelo. 2. Non voglio sharding (un algoritmo di hash usato da Jedis) per distribuire i dati o da solo (usando il suo algoritmo) leggere i dati dalle istanze. Abbiamo una strategia diversa per la distribuzione dei dati. Quindi voglio essere in grado di specificare, un record deve essere memorizzato in quale istanza redis e di conseguenza da dove dovrebbe essere letto. keyTags sembra fornire questo meccanismo ma non è sicuro di come utilizzarlo con "eval".
redis.clients.jedis.Pipeline? –