Jedis (Java 클라이언트)를 사용하여 Redis 서버와 통신합니다. 3 개의 다른 노드에서 실행되는 3 개의 Redis 인스턴스가 있습니다. 3 개의 Redis 인스턴스에서 일부 레코드를 가져오고 싶습니다. 이 "gets"(읽기)를 병렬로 실행하고 수신 된 데이터를 처리하고 최종 출력을 구성하려고합니다.Jedis는 비동기 작업을 지원합니까?
java에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
하나의 방법은 3 개의 스레드를 생성하고 각각의 스레드에서 (동기식으로) "get"(읽기)을 실행하는 것입니다. 3 개의 명령이 모두 완료 될 때까지 기다렸다가 결과를 결합하십시오.
Jedis는 콜백 기능을 사용하여 3 개의 "gets"(해당 명령) 명령을 비동기 적으로 발행 할 수 있습니까?
나는 3 개의 다른 Redis 인스턴스를 가지고 있습니다. 병렬로 이러한 Redis 인스턴스와 상호 작용하기 위해 "ShardedJedisPipeline"(jedis/tests/ShardedJedisPipelineTest.java)을 사용 하시겠습니까?
일반 Jedis 파이프 라인 (jedis/tests/PipeliningTest.java)은 단일 Redis 인스턴스에 여러 명령을 전송하기 때문에 Redis 서버와 그 끝에있는 모든 응답에서 순서대로 실행됩니다.
그래서 "ShardedJedisPipeline"을 사용해야한다고 가정합니다. 그러나 여기에는 두 가지 제한 사항이 있습니다. 1. 3 개의 Redis 인스턴스에서 병렬로 Lua 스크립트 즉 "eval"을 실행하고 싶습니다. 2. Sharding (Jedis에서 사용하는 일부 해시 알고리즘)을 사용하여 데이터를 배포하거나 자체 알고리즘 (알고리즘 사용)에서 인스턴스의 데이터를 읽지 않습니다. 우리는 데이터 배포를위한 다른 전략을 가지고 있습니다. 그래서 내가 지정할 수 있기를 원한다. 레코드는 redis 인스턴스와 그에 따라 읽어야하는 곳에 저장되어야한다. keyTags는이 메커니즘을 제공하는 것으로 보이지만 이것을 "eval"과 함께 사용하는 방법을 모릅니다.
redis.clients.jedis.Pipeline? –