Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Redis Jedis pubsub-jedisライブラリを使用してpub/subシステムを実装する方法

このチュートリアルでは、Jedisライブラリを使用してredispubサブシステムを実装する方法について学習します。

ジェダイライブラリ

Jedisは、redisデータストア用のJavaクライアントライブラリです。小さくて非常に使いやすく、redis 2.8.x、3.x.x以降のデータストアと完全に互換性があります。 jedisライブラリの詳細についてはこちらをご覧ください。

Redis Pub / Sub System

Redisは、パブリッシュ/サブスクライブメッセージングパラダイムを実装します。このメッセージングパラダイムによれば、メッセージの送信者(発行者)は、メッセージを特定の受信者(サブスクライバー)に直接送信するようにプログラムされていません。彼らは、どの受信者がメッセージを消費するか、または受信者がメッセージを消費するかどうかを知らずに、特定のチャネルにメッセージを送信(公開)します。メッセージを消費したい受信者は、1つ以上のチャネルにサブスクライブすることで関心を示し、どの送信者がメッセージを送信したかを知らなくても、それらのチャネルにのみ公開されるメッセージを受信します。 Redis Pub/Subシステムの詳細についてはこちらをご覧ください。

プロジェクトの設定

お気に入りのIDEで単純なMavenプロジェクトを作成し、以下の依存関係を pom.xmlに追加します。 ファイル。

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.0.1</version>
</dependency>

jedisライブラリの最新バージョンについては、このページを確認してください。

Redisのインストール

最新バージョンのRedisをインストールする必要があります。 redisのインストールの詳細については、このページを確認してください。

ジェダイコネクション

ジェダイのオブジェクトを作成します ( redis.clients.jedis.Jedis )Javaコードをredisに接続するためのクラス。

Jedis jedis = new Jedis();

ローカルマシンとデフォルトポート(6379)で1つのredisサービスを開始した場合、デフォルトのコンストラクターは正常に機能します。それ以外の場合は、正しいホストURLとポート番号を渡す必要があります。コンストラクターへの引数として。

チャンネルに登録

クラスを作成する「ChannelSubscribe」 、このクラスは、クライアントを作成することでチャネルC1とC2にサブスクライブします。他のクライアントがチャネルC1またはチャネルC2にメッセージを公開すると、このクライアントはメッセージを受信します。

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

public class ChannelSubscribe {

  public static void main(String[] args) {
		
    Jedis jedis = null;

    try {
			
	/* Creating Jedis object for connecting with redis server */
	jedis = new Jedis();
		
	/* Creating JedisPubSub object for subscribing with channels */	
	JedisPubSub jedisPubSub = new JedisPubSub() {
				
		@Override
		public void onMessage(String channel, String message) {
			System.out.println("Channel " + channel + " has sent a message : " + message );
			if(channel.equals("C1")) {
				/* Unsubscribe from channel C1 after first message is received. */	
				unsubscribe(channel);
			}
		}
				
		@Override
		public void onSubscribe(String channel, int subscribedChannels) {
			System.out.println("Client is Subscribed to channel : "+ channel);
			System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of channels");
		}
			
		@Override
		public void onUnsubscribe(String channel, int subscribedChannels) {
			System.out.println("Client is Unsubscribed from channel : "+ channel);
			System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of channels");
		}
			
	};
			
	/* Subscribing to channel C1 and C2 */
	jedis.subscribe(jedisPubSub, "C1", "C2");
			
	} catch(Exception ex) {			
			
		System.out.println("Exception : " + ex.getMessage());	
			
	} finally {
			
		if(jedis != null) {
			jedis.close();
		}
	}		
  }
}

出力

クラスを実行する場合「ChannelSubscribe」 、出力は次のようになります:-

Redis Jedis pubsub-jedisライブラリを使用してpub/subシステムを実装する方法




チャンネルに公開

クラスを作成する「ChannelPublish」 、このクラスはjedis接続を使用してredisサーバーに接続し、チャネルC1とC2にそれぞれ2つのメッセージを公開します。

import redis.clients.jedis.Jedis;

public class ChannelPublish {

  public static void main(String[] args) {
		
    Jedis jedis = null;
		
    try {			
        /* Creating Jedis object for connecting with redis server */
        jedis = new Jedis();
			
        /* Publishing message to channel C1 */
        jedis.publish("C1", "First message to channel C1");
			
        /* Publishing message to channel C2 */
        jedis.publish("C2", "First message to channel C2");
		
        /* Publishing message to channel C1 */
        jedis.publish("C1", "Second message to channel C1");
			
        /* Publishing message to channel C2 */
        jedis.publish("C2", "Second message to channel C2");
		
    } catch(Exception ex) {			
			
        System.out.println("Exception : " + ex.getMessage());
    } finally {
			
        if(jedis != null) {
          jedis.close();
        }		
    }
  }
}

出力

クラスを実行する場合「ChannelPublish」 ChannelSubscribeに出力 コンソールは次のようになります:-

Redis Jedis pubsub-jedisライブラリを使用してpub/subシステムを実装する方法

パターンの購読

クラスを作成する「PatternSubscribe」 、このクラスはパターンC *とDをサブスクライブしますか?クライアントを作成することによって。

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

public class PatternSubscribe {

  public static void main(String[] args) {
		
	Jedis jedis = null;
	
	try {
			
	/* Creating Jedis object for connecting with redis server */
	jedis = new Jedis();
			
	/* Creating JedisPubSub object for subscribing with channels */	
	JedisPubSub jedisPubSub = new JedisPubSub() {
				
		@Override
		public void onPMessage(String pattern, String channel, String message) {
			System.out.println("Channel " +channel+ " has sent a message : " +message+ " on pattern " + pattern);
			if(pattern.equals("C*")) {
				/* Unsubscribe from pattern C* after first message is received. */	
				punsubscribe(pattern);
			}
		}
				
		@Override
		public void onPSubscribe(String pattern, int subscribedChannels) {
			System.out.println("Client is Subscribed to pattern : "+ pattern);
			System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of patterns");
		}
				
		@Override
		public void onPUnsubscribe(String pattern, int subscribedChannels) {
			System.out.println("Client is Unsubscribed from pattern : "+ pattern);
			System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of patterns");
		}
				
	};
			
	/* Subscribing to channel C1 and C2 */
	jedis.psubscribe(jedisPubSub, "C*", "D?");
			
	} catch(Exception ex) {			
			
		System.out.println("Exception : " + ex.getMessage());	
			
	} finally {
		
		if(jedis != null) {
			jedis.close();
		}
		
	}		
  }

}

出力

クラスを実行するとき「PatternSubscribe」 、出力は次のようになります:-

Redis Jedis pubsub-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 {			
	/* Creating Jedis object for connecting with redis server */
	jedis = new Jedis();
			
	/* Publishing message to channel C13 */
	jedis.publish("C13", "Message to channel C13");
	
	/* Publishing message to channel D2 */
	jedis.publish("D2", "Message to channel D2");
		
	/* Publishing message to channel C134 */
	jedis.publish("C134", "Message to channel C134");
			
	/* Publishing message to channel D3 */
	jedis.publish("D3", "Message to channel D3");
			
	} catch(Exception ex) {			
			
        	System.out.println("Exception : " + ex.getMessage());	
			
	} finally {
			
		if(jedis != null) {
			jedis.close();
		}
			
	}
  }
	
}

出力

クラスを実行するとき「PatternPublish」 PatternSubscribeに出力 コンソールは次のようになります:-

Redis Jedis pubsub-jedisライブラリを使用してpub/subシステムを実装する方法

参照:-

  1. Pubサブコマンドドキュメント

Jedisライブラリを使用してredispubサブシステムを実装する方法は以上です。気に入った場合は、コメントセクションで自分の考えを共有し、他の人にも共有してください。

 
  1. Redis PUBLISH – redis pub/subでメッセージを公開する方法

    このチュートリアルでは、redis-cliを使用してredisメッセージブローカーシステムでメッセージを公開する方法について学習します。 PUBLISHコマンド PUBLISHコマンドは、redisメッセージブローカーの指定されたチャネルにメッセージを公開するために使用されます。メッセージを受信したサブスクライバーの数を返します。 redis PUBLISHコマンドの構文は次のとおりです:- 構文:- redis host:post> PUBLISH <channel> <message> 出力:- - (integer) reply, represe

  2. Redis SUBSCRIBE – redis pub/subで複数のチャネルをサブスクライブする方法

    このチュートリアルでは、redis-cliを使用してredisメッセージブローカーシステムで複数のチャネルをサブスクライブする方法について学習します。 SUBSCRIBEコマンド SUBSCRIBEコマンドは、redisメッセージブローカーシステムで指定された1つ以上のチャネルにクライアントをサブスクライブするために使用されます。クライアントがサブスクライブコマンドを実行すると、サブスクライブされたチャネルをリッスンするサブスクライブ状態になります。他のクライアントによって指定されたチャネルに公開されたメッセージは、redisによってサブスクライブされたすべてのクライアントにプッシュされま