레디 스 프로젝트 이론과 실제 응용 --- (C) --- Jedis 사용

자바 클라이언트를 레디 스 Jedis, 소스 주소 : HTTPS : //github.com/xetorthio/jedis

치어 구성 :

<의존성>
   <의 groupId> redis.clients </의 groupId>
    <artifactId를> jedis </ artifactId를>
    <버전> 3.0.1 </ 버전>
    <type>은 단지 </ type>은
    <분야> 컴파일 </ 범위>
</ 의존성>
 
 
1) 연결 독립 실행 형 버전
     공공  무효 testJedis ()가 발생 예외 {
           // 1 단계 : Jedis 객체를 생성합니다. 당신은 서버의 IP와 포트를 지정해야합니다. 
          Jedis = Jedis 새로운 새 Jedis를 ( "192.168 ** ..", 6379 );
           // 단계 2 : Jedis 객체 데이터베이스 조작 각 명령 레디 스 방식에 대응. 
          결과 = 문자열 ( "여보세요"를 Jedis.get );
           // 세 번째 단계 : 결과를 인쇄 할 수 있습니다. 
          에서 System.out.println (결과);
           // 4 단계 : 닫기 Jedis 
          jedis.close (); 
     }

2) 단독 사용하도록 연결 풀에 연결

     공공  무효 testJedisPool ()가 발생 예외 {
           // 1 단계 : JedisPool 개체를 만듭니다. 당신은 서버의 IP와 포트를 지정해야합니다. 
          JedisPool = JedisPool 새로운 새로운 JedisPool ( "192.168 ** **.", 6379. );
           // 단계 : JedisPool 주제 Jedis에서 얻을. 
          Jedis = Jedis jedisPool.getResource ();
           // 번째 단계 : Jedis 레디 스 서버를 이용하여 동작. 
          jedis.set ( "jedis", "테스트" ) 
          문자열 결과 = jedis.get ( "jedis" ) 
          에서 System.out.println (결과); 
          // 단계 IV : 조작 객체 오프 jedis 후 연결 풀 복구 자원. 
          jedis.close ();
          
          jedisPool.close (); 
     }
3) 클러스터 에디션을 연결
     공공  무효 testJedisCluster ()가 발생 예외 {
           // 단계 : 사용 JedisCluster 객체입니다. 의 Set <HostAndPort> 매개 변수를 요구합니다. 노드의 레디 스의 목록입니다. 
          SET <HostAndPort> 노드 = 새로운 새 HashSet의 <> (); 
          nodes.add ( 새로운 새 HostAndPort ( "192.168 ** ..", 7001 )); 
          nodes.add ( 새로운 새 . ". 192.168 **"HostAndPort ( , 7002 )); 
          nodes.add ( 새로운 새 HostAndPort ( "192.168 ** ..", 7003 )); 
          nodes.add ( 새로운 새 HostAndPort ( "192.168 ** ..", 7004 )); 
          nodes.add ( 새 새HostAndPort ( "192.168 ** ..", 7005 )); 
          nodes.add ( 새로운 새 HostAndPort ( "192.168 ** ..", 7006 )); 
          JedisCluster jedisCluster = 새로운 새 JedisCluster (노드)
           // 제 단계 : 직접 JedisCluster의 레디 스를 조작 객체. 실시 예에서, 단일 시스템이있다. 
          jedisCluster.set ( "안녕하세요", "100" ); 
          문자열 결과 = jedisCluster.get ( "안녕하세요" );
           // 세 번째 단계 : 인쇄 결과 
          에서 System.out.println (결과);
           // 4 단계 : 시스템 닫기 JedisCluster 개체를 닫기 전에. 
          jedisCluster.close (); 
     }
 
4) JedisPool 초기 설정 :
개인  정적  최종  INT taskCount = 50; // 동시 작업 
개인  정적  최종  INT BATCHSIZE = 10; // 파이프 크기 
개인  정적  최종  INT cmdCount = 1000; // 각 태스크 처리 순서 번호에 대한 
개인  정적  최종  부울 usePipeline = true로 ; 
 
JedisPoolConfig poolConfig = 새로운 새 JedisPoolConfig (); 
poolConfig.setMaxActive ( 200이다 ); 
(poolConfig.setMaxIdle 100 ) 
(poolConfig.setMaxWait 2,000); 
poolConfig.setTestOnBorrow ( 거짓 ); 
poolConfig.setTestOnReturn ( 거짓 ); 
jedisPool = 새로운 JedisPool (poolConfig, 호스트 포트);

5) Jedis 게시 및 메시징 API 가입

   5.1) 뉴스 구독 신청

   

   공개  공극 subscribeChannal () { 
// jedisPool가 jedis에서 개체를 얻을 Jedis JDS
= RedisInsUtil.getJedis (); // 처리 방법에 리스터 (...)에서 얻어진 실시 예 1 개 onPMessage 가입 정보 jds.psubscribe ( 이 본을 , 새로운 새 문자열 [] { "channal01", "channal02" })
// 2 실시 형태 의 처리 (통상 가입) 방법 리스터 (...)에서 얻어진 피드의 onMessage 정보 // jedis.subscribe (청취자 "foo에 ","왓슨은 "); } // 가입 처리 시간 초기화 @Override 공공 무효 onSubscribe (문자열 채널, int로 {) subscribedChannels을 } // 때 표현 방식으로 가입 프로세스를 초기화      
@Override 공공 무효 (문자열 패턴 onPSubscribe을 int로 {subscribedChannels를) } @Override // 가입 메시지의 방법으로 달성 표현의 치료 공공 무효 onPMessage (문자열 패턴, 문자열 채널, 문자열 메시지) { log.info ( "onPMessage을 () "패턴 + +"= "+ + 채널"MSG = "+ 메시지) } // 취득 가입 메시지 후 처리 공개 공극 의 onMessage (채널 문자열, 문자열 메시지) { }

     5.2) 보도 자료

             Jedis의 게시 (...) 방법이 될 수 호출 만 발표했다.

    Jedis = Jedis ru.getConnection (); // jedis가 자신의 포장 도구 개체 수 
     (jedis.publish , "bar123"을 "hello_foo을" );  

 

6) 파이프 라인

원리 :
    한 번에 여러 명령을 전송할 수있다 TCP 프로토콜이 연결 관 (파이프 라인)을 사용하여 감소 된 라운드 레디 스에 클라이언트의 수를 감소시킴으로써 달성 클라이언트와 서버 레디 스 파이프 라인 사이 레디 스 후에 실행 시간의 결과를 반환 시간 지연하지만 원리 따라서 데이터의 순서를 보장 큐는 FIFO 원리이며, 파이프 큐가 구현된다. 
    결함 : 레디 스 먼저 모든 명령을하기 전에 처리 된 모든 명령의 처리 결과를 캐시해야 전송되는 파이프 라인 모드 명령을 사용하여 패키지로주의한다. 더 많은 패키지 명령 캐시는 더 많은 메모리를 소모합니다. 그래서 그것을 위해, 더 나은 포장되지 않습니다. 상황에 따라 적절한 시험의 특정 요구의 수입니다.
   참고 : 기본 번호는 파이프 라인 (53) 동기화, 데이터 (53)에 축적의 Arges 데이터를 제출하는 것;
  
7) 확장 :
    해시 레디 스 클러스터 조각 때문에, JedisCluster 객체는 네이티브 메소드에게 Pipline 도관 및 키를 지원하지 않습니다. 그러나 성능의 추구의 실제 프로젝트와는 레디 스 클러스터 에디션 종종 온라인 정보의 일부를 정렬, 이러한 방법을 지원 필요 호환 독립형 스위치 또는 문제를 고려, 이제 다음 아이디어를 제공, 구체적인 방법은 GitHub의 예를 참조 할 수 있습니다
   
  아이디어의 파이프 라인 Pipline 실현 :
 
  레디 스 클러스터 사양 : 레디 스 클러스터 키 공간으로 나누어 져  16384  슬롯 (슬롯), 클러스터 노드의 최대 수는  16384  가. 에 대한 책임을 각 마스터 노드  16384  해시 탱크 부분입니다. 클러스터가 "안정"(안정된) 상태 (되지 실행 그룹 재구성 (재구성) 조작) 일 때, 각각의 해쉬 처리 만 슬롯의 노드에 의해 (해시 슬롯 할당 알고리즘이 CRC16를 계산한다).
 따라서, 

  1. 키에있어서, 상기 홈에 대응하는 키 번호를 삽입할지 (JedisClusterCRC16.getSlot) (키)를 알 수있는 각 노드의 슬롯을 통해 홈 (분산하여 클러스터에서 해당 번호를 찾을 Jedis 할 키는 노드)에 있어야합니다.

  (2) 동일한 슬롯 키 명령을 실행하는 데 동일한 jedis.pipeline를 사용한다.

  3. 파이프 라인은 반환 된 모든 응답을 병합합니다.

 

  키 아이디어의 실현 :

     (각각 클라이언트 객체가 J를 인수 해당) 클러스터 사이클의 모든 노드는, 각 노드는 키을, 그리고 마지막으로 반환 결합.

   

  참고 : 최신 슬롯 분포를 얻기 위해 새로 고침 각각의 실행이 필요하기 전에.

 

 

 

추천

출처www.cnblogs.com/huyangshu-fs/p/11256001.html