Я использую Jedis (java client) для связи с сервером Redis. У меня три экземпляра Redis, работающих на трех разных узлах. Я хочу «получить» (прочитать) некоторые записи из 3 экземпляров Redis. Я хочу выпустить эти «получает» (чтение) параллельно, а затем выполнить некоторую обработку полученных данных и сформировать окончательный вывод.Поддерживает ли Jedis асинхронные операции
Каков наилучший способ сделать это в java?
Один из способов - создать 3 потока и isssue «get» (прочитать) в каждом из них (синхронно). Дождитесь завершения всех трех команд, а затем объедините результат.
Есть ли у Jedis механизм для выдачи 3 «получает» (любая команда в этом случае) асинхронно с функцией обратного вызова?
У меня есть 3 разных экземпляра Redis. Так вы предлагаете использовать «ShardedJedisPipeline» (jedis/tests/ShardedJedisPipelineTest.java) для взаимодействия с этими экземплярами Redis параллельно?
Обычный Jedis Pipeline (jedis/tests/PipeliningTest.java) просто отправляет несколько команд одному экземпляру Redis, поэтому они выполняются один за другим на сервере Redis (и все ответы доступны в конце).
Поэтому я предполагаю, что мне нужно использовать «ShardedJedisPipeline». Но есть два ограничения на это: 1. Я хочу выполнить сценарий Lua, т. Е. «Eval» на трех экземплярах Redis параллельно. 2. Я не хочу, чтобы шрайдинг (некоторый алгоритм хеширования, используемый Джедаем) для распространения данных или сам по себе (с использованием его алгоритма) чтения данных из экземпляров. У нас есть другая стратегия распространения данных. Поэтому я хочу иметь возможность указать, запись должна быть сохранена в экземпляре redis и, соответственно, откуда он должен быть прочитан. keyTags, похоже, обеспечивает этот механизм, но не уверен, как использовать его с помощью «eval».
redis.clients.jedis.Pipeline? –