Estoy usando Jedis (cliente Java) para comunicarme con el servidor Redis. Tengo 3 instancias de Redis ejecutándose en tres nodos diferentes. Quiero "obtener" (leer) algunos registros de 3 instancias de Redis. Deseo emitir estos "get" (lecturas) en paralelo, y luego hacer algún procesamiento en los datos recibidos y formar un resultado final.¿Jedis admite operaciones asincrónicas
¿Cuál es la mejor manera de hacer esto en java?
Una de las maneras es crear 3 hilos y emitir "obtener" (leer) en cada uno de ellos (sincrónicamente). Espere a que se completen los 3 comandos y luego combine el resultado.
¿Tiene Jedis un mecanismo para emitir 3 "obtiene" (cualquier comando para el caso) de forma asíncrona, con una función de devolución de llamada?
Tengo 3 diferentes instancias de Redis. Entonces, ¿sugiere utilizar "ShardedJedisPipeline" (jedis/tests/ShardedJedisPipelineTest.java) para interactuar con estas instancias de Redis en paralelo?
Normal Jedis Pipeline (jedis/tests/PipeliningTest.java), simplemente envía varios comandos a la instancia individual de Redis para que se ejecuten uno después de otro en el servidor Redis (y todas las respuestas disponibles al final).
Así que supongo que tengo que usar "ShardedJedisPipeline". Pero hay dos limitaciones para esto: 1. Deseo ejecutar el script Lua, es decir, "eval" en 3 instancias de Redis en paralelo. 2. No quiero fragmentación (Algún algoritmo hash utilizado por Jedis) para distribuir datos o por sí mismo (utilizando su algoritmo) Leer datos de instancias. Tenemos una estrategia diferente para distribuir datos. Así que quiero poder especificar, se debe almacenar un registro en la instancia de redis y, por consiguiente, desde donde se debe leer. keyTags parece proporcionar este mecanismo, pero no está seguro de cómo usar esto con "eval".
redis.clients.jedis.Pipeline? –