Computer >> 컴퓨터 >  >> 프로그램 작성 >> Redis

Redis Jedis pub sub- jedis 라이브러리를 사용하여 pub/sub 시스템을 구현하는 방법

이 튜토리얼에서는 Jedis 라이브러리를 사용하여 redis pub 하위 시스템을 구현하는 방법에 대해 알아봅니다.

제디스 도서관

Jedis는 redis 데이터 저장소용 Java 클라이언트 라이브러리입니다. 작고 사용하기 매우 쉬우며 redis 2.8.x, 3.x.x 이상 데이터 저장소와 완벽하게 호환됩니다. jedis 라이브러리에 대한 자세한 정보는 여기에서 확인할 수 있습니다.

Redis 게시/구독 시스템

Redis는 게시/구독 메시징 패러다임을 구현합니다. 이 메시징 패러다임에 따르면 메시지의 발신자(발행자)는 특정 수신자(가입자)에게 직접 메시지를 보내도록 프로그래밍되지 않습니다. 그들은 어떤 수신자가 메시지를 소비할지 여부를 알지 못한 채 특정 채널에 자신의 메시지를 전송(게시)합니다. 메시지를 소비하려는 수신자는 하나 이상의 채널을 구독하여 관심을 표명하고, 보낸 사람이 메시지를 보냈는지 모른 채 해당 채널에만 게시된 메시지를 받습니다. 여기에서 Redis Pub/Sub 시스템에 대한 자세한 정보를 찾을 수 있습니다.

프로젝트 설정

좋아하는 IDE에서 간단한 maven 프로젝트를 만들고 pom.xml에 아래에 언급된 종속성을 추가합니다. 파일.

  redis.clients  jedis  3.0.1

jedis 라이브러리의 최신 버전은 이 페이지에서 확인하세요.

Redis 설치

최신 버전의 Redis를 설치해야 합니다. redis 설치에 대한 자세한 내용은 이 페이지를 확인하세요.

제다이 커넥션

Jedis의 개체 만들기 ( redis.clients.jedis.Jedis ) 자바 코드를 redis에 연결하기 위한 클래스

제디스 제디스 =새로운 제디스();

로컬 시스템과 기본 포트(6379)에서 하나의 redis 서비스를 시작한 경우 기본 생성자가 제대로 작동합니다. 그렇지 않으면 올바른 호스트 URL과 포트 번호를 전달해야 합니다. 생성자에 대한 인수로.

채널 구독

수업 만들기 'ChannelSubscribe' , 이 클래스는 클라이언트를 생성하여 채널 C1 및 C2를 구독합니다. 이 클라이언트는 다른 클라이언트가 채널 C1 또는 채널 C2에 메시지를 게시할 때 메시지를 받습니다.

redis.clients.jedis.Jedis 가져오기 try { /* redis 서버와 연결하기 위한 Jedis 객체 생성 */ jedis =new Jedis(); /* 채널 구독을 위한 JedisPubSub 객체 생성 */ JedisPubSub jedisPubSub =new JedisPubSub() { @Override public void onMessage(String channel, String message) { System.out.println("Channel " + channel + " has sent a message :" + 메시지 ); if(channel.equals("C1")) { /* 첫 번째 메시지가 수신된 후 채널 C1에서 구독을 취소합니다. */ 구독 취소(채널); } } @Override public void onSubscribe(String channel, int subscribedChannels) { System.out.println("클라이언트가 채널을 구독하고 있습니다:"+ 채널); System.out.println("클라이언트는 구독 중인 "+ subscribedChannels + " 채널 수"); } @Override public void onUnsubscribe(String channel, int subscribedChannels) { System.out.println("클라이언트가 채널에서 구독 취소됨:"+ 채널); System.out.println("클라이언트는 구독 중인 "+ subscribedChannels + " 채널 수"); } }; /* 채널 C1 및 C2 구독 */ jedis.subscribe(jedisPubSub, "C1", "C2"); } catch(예외 예외) { System.out.println("예외:" + ex.getMessage()); } 마지막으로 { if(jedis !=null) { jedis.close(); } } }}

출력

'ChannelSubscribe' 수업을 실행할 때 , 출력은 다음과 같습니다.- 

Redis Jedis pub sub- jedis 라이브러리를 사용하여 pub/sub 시스템을 구현하는 방법




채널에 게시

'ChannelPublish' 수업 만들기 , 이 클래스는 jedis 연결을 사용하여 redis 서버에 연결하고 채널 C1과 C2에 각각 두 개의 메시지를 게시합니다.

 import redis.clients.jedis.Jedis;public class ChannelPublish { public static void main(String[] args) { Jedis jedis =null; try { /* redis 서버와 연결하기 위한 Jedis 객체 생성 */ jedis =new Jedis(); /* 채널 C1에 메시지 게시 */ jedis.publish("C1", "채널 C1에 대한 첫 번째 메시지"); /* 채널 C2에 메시지 게시 */ jedis.publish("C2", "채널 C2에 대한 첫 번째 메시지"); /* 채널 C1에 메시지 게시 */ jedis.publish("C1", "채널 C1에 두 번째 메시지"); /* 채널 C2에 메시지 게시 */ jedis.publish("C2", "채널 C2에 두 번째 메시지"); } catch(예외 예외) { System.out.println("예외:" + ex.getMessage()); } 마지막으로 { if(jedis !=null) { jedis.close(); } } }}

출력

'ChannelPublish' 수업을 실행할 때 , ChannelSubscribe의 출력 콘솔은 다음과 같습니다.- 

Redis Jedis pub sub- jedis 라이브러리를 사용하여 pub/sub 시스템을 구현하는 방법

패턴 구독

'PatternSubscribe' 수업 만들기 , 이 클래스는 패턴 C* 및 D를 구독합니까? 클라이언트를 생성하여.

 redis.clients.jedis.Jedis 가져오기 try { /* redis 서버와 연결하기 위한 Jedis 객체 생성 */ jedis =new Jedis(); /* 채널 구독을 위한 JedisPubSub 객체 생성 */ JedisPubSub jedisPubSub =new JedisPubSub() { @Override public void onPMessage(String pattern, String channel, String message) { System.out.println("Channel " +channel+ "이 메시지:" +message+ " 패턴에 " + 패턴); if(pattern.equals("C*")) { /* 첫 번째 메시지가 수신된 후 패턴 C*에서 구독을 취소합니다. */ punsubscribe(패턴); } } @Override public void onPSubscribe(String pattern, int subscribedChannels) { System.out.println("클라이언트가 패턴에 가입되어 있습니다:"+ 패턴); System.out.println("클라이언트는 "+ subscribedChannels + " 패턴 수"에 가입되어 있습니다.); } @Override public void onPUnsubscribe(String pattern, int subscribedChannels) { System.out.println("클라이언트가 패턴에서 구독 취소됨:"+ 패턴); System.out.println("클라이언트는 "+ subscribedChannels + " 패턴 수"에 가입되어 있습니다.); } }; /* 채널 C1 및 C2 구독 */ jedis.psubscribe(jedisPubSub, "C*", "D?"); } catch(예외 예외) { System.out.println("예외:" + ex.getMessage()); } 마지막으로 { if(jedis !=null) { jedis.close(); } } }}

출력

'PatternSubscribe' 수업을 실행할 때 , 출력은 다음과 같습니다.- 

Redis Jedis pub sub- jedis 라이브러리를 사용하여 pub/sub 시스템을 구현하는 방법




패턴에 게시

'PatternPublish' 클래스 만들기 , 이 클래스는 jedis 연결을 사용하여 redis 서버에 연결하고 채널 C13, D2, C134 및 D3에 메시지를 게시합니다.

 import redis.clients.jedis.Jedis;public class PatternPublish { public static void main(String[] args) { Jedis jedis =null; try { /* redis 서버와 연결하기 위한 Jedis 객체 생성 */ jedis =new Jedis(); /* 채널 C13에 메시지 게시 */ jedis.publish("C13", "채널 C13에 메시지"); /* 채널 D2에 메시지 게시 */ jedis.publish("D2", "채널 D2에 메시지"); /* C134 채널에 메시지 게시 */ jedis.publish("C134", "C134 채널에 메시지"); /* 채널 D3에 메시지 게시 */ jedis.publish("D3", "채널 D3에 메시지"); } catch(예외 예외) { System.out.println("예외:" + ex.getMessage()); } 마지막으로 { if(jedis !=null) { jedis.close(); } } } }

출력

'PatternPublish' 수업을 실행할 때 , PatternSubscribe의 출력 콘솔은 다음과 같습니다.-

Redis Jedis pub sub- jedis 라이브러리를 사용하여 pub/sub 시스템을 구현하는 방법

참조:-

  1. Pub 하위 명령 문서

Jedis 라이브러리를 사용하여 redis pub 하위 시스템을 구현하는 방법은 여기까지입니다. 마음에 드셨다면 댓글 섹션에 의견을 공유하고 다른 사람들과도 공유해 주세요.

<전>