을 사용하고 있습니다. Reconnection은 1 개의 요청 패킷을 보내고 1 개의 응답 패킷을 거의 즉시 반환하는 것과 비교할 때 많은 시간과 TCP 패킷을 필요로합니다.
연결 관리는 일반적으로 풀 구현에 의해 수행됩니다. 상추의 경우 docs state
lettuce는 Redis Standalone 및 Redis Sentinel 관리 연결에 대한 연결 풀링을 제공합니다. 상추를 사용할 때 풀링이 필요하지는 않지만 일부 시나리오에서는 편리 할 수 있습니다. 양상추 연결은 수명이 길고 자동 재 연결을 특징으로합니다. 여러 스레드가 하나의 연결을 동시에 사용할 수 있습니다.
이 경우에는 풀을 생성하지 않아도됩니다. Redis는 단일 스레드입니다. & jedis
과 같은 다른 라이브러리에서는 연결이 스레드로부터 안전하지 않기 때문에 풀을 사용하려고합니다.
코멘트에 주석이 있음을 지적 했으므로 여러 연결을 사용해야하는 경우도 있습니다. 또한 같은 문서에서 위에 링크 :
당신은 BLPOP
, BRPOP
로, ... 전체 연결을 차단하지 않도록 차단 호출을 사용합니다. 연결이 차단 명령에 의해 차단되면 레디 스 점점 요소를 (이 명령은 레디 스 '단일 스레드를 차단하지 않는
, 그들은 발생하는 특정 이벤트에 대기 결과에 응답 할 때까지,이 상태로 유지됩니다 목록에 추가됨). 따라서 &은 다른 연결에서 Redis와 상호 작용해야합니다. 그렇게하지 않으면 속도가 느려집니다.하지만 : 유일한 클라이언트이고 이벤트를 발생시키는 데이터를 작성할 계획이라면 작성하기 전에 무언가를 읽고 싶다면 교착 상태가 될 수 있습니다.
거래 (MULTI/EXEC
)를 사용합니다. 트랜잭션은 트랜잭션 상태에서 연결을 전환합니다. 연결을 공유하는 다른 스레드는 실수로 트랜잭션으로 넘어갑니다.
이 경우 코드의 정확성에 영향을주기 때문에 기본적으로 여러 연결을 사용해야합니다. 갑자기 null
값이 transactions 동안 반환되는 것은 값이 저장되지 않았다는 것을 의미하지 않습니다. 반환 값을 확인하지 않아도 변경 사항은 사용자가 알아 차리지 않고 롤백 될 수 있습니다.
아마도 c) 열린 상태로 유지되는 전체 연결 풀. 좁은 범위 = 연결 설정 중 많은 시간이 손실 됨 – zapl
@zapl 귀하의 의견을 통해 내가 사용하고있는 라이브러리에서 풀 인터페이스를 찾을 수있게되었습니다. 감사. 나는 당신이 1 개를 배치하는 경우에 당신의 응답을 받아 들일 것입니다. – sargas