Redis에 대한 응용 프로그램 시나리오가 너무 많습니다. 이제 주요 기능 중 하나 인 게시 구독 (PUB/Sub)을 소개하겠습니다.
기능 소개 :
Redis (Pub/Sub)의 게시 구독은 무엇입니까? Pub/Sub 함수 (Publish, Subscribe)는 게시 및 구독 기능입니다. 이벤트 기반 시스템에서 PUB/Sub는 현재 널리 사용되는 통신 모델입니다. 대규모 시스템에 필요한 느슨하게 결합 된 상호 작용 모델을 제공하기 위해 기본 커뮤니케이션 메커니즘으로 이벤트를 채택합니다. 가입자 (예 : 클라이언트)는 이벤트 구독 형태로 수신하는 데 관심이있는 이벤트 또는 이벤트 유형을 표현합니다. 게시자 (예 : 서버)는 가입자가 언제든지 관심있는 이벤트를 관련 가입자에게 알릴 수 있습니다. 디자인 패턴에 익숙한 친구는 이것이 23 개의 디자인 패턴 중 관찰자 패턴과 매우 유사하다는 것을 이해해야합니다.
마찬가지로 Redis의 Pub/Sub는 메시지 커뮤니케이션 모드이며 주요 목적은 메시지 게시자 및 메시지 가입자를 모색하는 것입니다. 펍/하위 서버로서 Redis는 가입자와 게시자 간의 메시지 라우팅 기능을 수행합니다.
위의 전문적인 설명을 이해하지 못하면 중요하지 않지만 이해하지 못합니다.
간단히 말해서, 채널을 의미하는 채널의 개념도 있습니다. 예를 들어, 은행 채널을 구독하는 경우 자금이 변경되면 은행이 해당 채널을 통해 정보를 보내는 것을 수락합니다. 여기서는 은행에 정보를 요청하기보다는 수동적으로 받고 있습니다. 이 예에서는 귀하가 서브 (가입자)이고 은행은 PUB (PUB)입니다.
프로젝트 응용 프로그램 시나리오 :
나는 항상 같은 기술을 알기 전에 먼저 그러한 기술이 어디에서 사용될 지 이해하고 맹목적으로 배울 수 없다고 생각했습니다.
구독 게시의 기능을보고 간단한 라이브 채팅 시스템을 만드는 데 적합합니다. 물론 이것은 그들 중 하나입니다. 물론 그러한 것들은 우리의 발전에 거의 관여하지 않습니다. 일반적으로 사용되는 또 다른 시나리오를 알려 드리겠습니다. 분산 아키텍처에서는 종종 읽기 및 쓰기 분리 시나리오에 직면합니다. 쓰기 과정에서 Redis를 사용하여 구독을 게시하여 서면 값이 각 읽기 프로그램에 적시에 게시되어 데이터의 완전한 일관성을 보장 할 수 있습니다. 예를 들어, 블로그 웹 사이트에서 100 명의 팬이 구독합니다. 새 기사를 게시하면 메시지를 팬에게 푸시 할 수 있습니다. 요컨대, 많은 장면이 있으며 탐색해야합니다. .
Java가 Redis를 운영하는 방법을 검토하십시오.
Redis는 캐시 데이터베이스이며 C/S의 구조, 즉 클라이언트 및 서버의 구조입니다. 일반적으로 Java에서는 일반적으로 Jedis (클라이언트)를 사용하여 Redis (Server)를 작동합니다. 작동 할 때는 둘 사이에 연결을 설정해야합니다. 관계형 데이터베이스에서 데이터베이스 링크와 마찬가지로 일반적으로 연결을 설정하고 닫기위한 시간을 절약하기 위해 링크 재사용을 달성하기위한 연결 풀을 유지 관리합니다. 따라서 Jedis에는 Jedispool (Jedis Connection Pool)이라는 개념이 있으며 우리 모두 풀에서 연결을 사용합니다.
코드 :
Jedis를 사용하려면 먼저 종속성을 소개합니다.
<pectionency> <groupid> redis.clients </groupid> <artifactid> jedis </artifactid> <bersion> 2.9.0 </version> </fectionency>
게시자 만들기 (게시자)
공개 클래스 출판사 확장 스레드 {private final jedispool jedispool; 공공 출판사 (Jedispool Jedispool) {this.jedispool = jedispool; } @override public void run () {bufferedReader reader = new bufferedReader (new inputStreamReader (System.In)); Jedis Jedis = jedispool.getResource (); // 연결 풀에서 연결을 가져와 (true) {string line = null; try {line = reader.readline (); if (! "Quit".equals (line)) {jedis.publish ( "mychannel", line); // myChannel 's Channel에서 메시지를 눌러} else {break; }} catch (ioexception e) {e.printstacktrace (); }}}}다른 가입자를 만듭니다
공개 클래스 가입자는 jedispubsub {public subscriber () {} @override public void onMessage (문자열 채널, 문자열 메시지) {// 메시지를 받고 통화 시스템을 수신하고 styst.frintln ( "Redis 게시 된 메시지, 채널 %s", channer, message); } @override public void onsubscribe (String Channel, int SubscribedChannels) {// 채널에 대한 구독되지 않은 채널은 System.out.println ( "Subscribe Redis Channel Success, Channel %S, SubscribedChannels %d", 채널, 가입 채널)을 호출합니다. } @override public void onunsubscribe (문자열 채널, int subscribedChannels) {// 구독되지 않은 구독이 시스템을 호출합니다. }}여기서 가입자는 Jedispubsub를 상속하여 세 가지 방법을 다시 작성해야합니다. 목적 의견이 작성되었으며 매우 간단합니다.
여기서 구독자를 정의하고 아래 가입 채널로 이동합니다.
공개 클래스 서브 스레드는 스레드 {private final jedispool jedispool; 개인 최종 가입자 가입자 = 새 가입자 (); 개인 최종 문자열 채널 = "MyChannel"; Public Subthread (Jedispool Jedispool) {Super ( "Subthread"); this.jedispool = jedispool; } @override public void run () {system.out.println (String.format ( "구독, 채널 %s, 스레드가 차단됩니다", 채널); Jedis Jedis = null; {jedis = jedispool.getResource (); // 연결을 꺼냅니다. jedis.subscribe (가입자, 채널); // 구독 API를 통해 구독하면, 매개 변수는 가입자 및 채널 이름} catch (예외 e) {system.out.println (String.format ( "subsrcibe 채널 오류, %s", e)); } 마침내 {if (jedis! = null) {jedis.close (); }}}}마지막으로 다른 테스트 클래스를 작성하고 실행하십시오. 키보드에 메시지를 입력하면 가입자가 OnMessage 메소드를 트리거합니다.
Public Class PubSubdemo {public static void main (String [] args) {// redis 서버 Jedispool Jedispool = New Jedispool (New Jedispoolconfig (), "127.0.0.1", 6379); System.out.println (String.format ( "Redis Pool이 시작됩니다. Redis IP %S, Redis Port %D", "127.0.0.1", 6379); 서브 스레드 서브 스레드 = 새로운 서브 스레드 (Jedispool); // 가입자 subthread.start (); 게시자 게시자 = New Publisher (Jedispool); // publisher publisher.start (); }}인쇄 결과를 참조하십시오
코드 주소 https://github.com/fangyong1421/redis를 첨부하십시오
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.