2017-02-06 2 views
0

현재 프로젝트를 Jedis에서 Lettuce로 이식 중입니다.레터스 : 반응성 API에 대한 공유 연결

  1. 반응성 API에 공유 연결을 사용해도 괜찮습니까? BLPOP 및 MULTI/EXEC와 같은 차단 및 트랜잭션 작업을 호출하지 않는 한?

  2. 반응 형 API를 통한 트랜잭션에 풀링 된 연결을 사용해야합니까?

  3. 반응성 API를 통해 명령을 파이프 라인 처리 할 수 ​​있습니까? 전용 연결을 사용해야합니까?

답변

1

여러 스레드간에 하나의 연결을 공유하는 것이 의도 된 사용법입니다. 여러 가지 이유가 있습니다.

  1. 연결이 스레드 안전합니다.
  2. Redis는 단일 스레드입니다. 하나의 호스트에 여러 개의 연결을 사용하면 Redis 처리 병렬 처리가 없기 때문에 성능상의 이점이 없기 때문에 분명히 이해가되지 않습니다.
  3. 연결 풀링은 여러 연결을 엽니 다. 이것은 트랜잭션 및 명령 분리 격리에 대해 의미가 있지만 풀링은 성능 저하를 유발할 수 있습니다. 여러 응용 프로그램 서버에서 연결을 수신하는 단일 Redis 서버는 연결을 수락하고 관리하면서 처음에는 바쁘게 유지됩니다. 단일 스레드 Redis 특성은 연결 수용 및 제거 프로세스에도 영향을줍니다.

파이프 라이닝 관련 : 레터스는 레터스가 파이프 라인을 기본적으로 사용한다는 의미의 레디 스에 후속 명령을 보내기 전에 명령 완료를 기다리지 않습니다. 파이프 라이닝을 방지하는 유일한 방법은 명령 호출에서 외부 동기화입니다.

각 명령은 TCP 연결에 직접 플러시됩니다. 양상추는 연결에 플러시하기 전에 일괄 처리를 사용하여 명령을 그룹화 할 수 있습니다. 명령 플러시는 수작업이며 일괄 적재 및 반작용을 목적으로하지 않습니다.

  1. 위키는 세부의 깊은 수준에 당신의 질문에 대답해야합니다 : https://github.com/mp911de/lettuce/wiki
  2. 양상추 Project Reactor에 따라 반응성 스트림 API 멀리 RxJava 1에서 마이그레이션

    두 가지 더있다. 첫 번째 베타 버전이 이미 출시 된 상추 5.0에서 발생합니다.

HTH,

마크