Redisにはあまりにも多くのアプリケーションシナリオがあります。次に、その主要な機能の1つであるパブリッシュサブスクリプション(Pub/Sub)を紹介します。
機能の紹介:
Redis(Pub/Sub)のパブリッシュサブスクリプションとは何ですか? Pub/Sub Function(Means Publish、subscribe)は、公開およびサブスクリプション機能です。イベントベースのシステムでは、Pub/Subは現在広く使用されている通信モデルです。基本的なコミュニケーションメカニズムとしてイベントを採用して、大規模システムで必要なゆるい結合相互作用モデルを提供します。サブスクライバー(クライアントなど)は、イベントサブスクリプションの形で受信することに関心のあるイベントまたはイベントの種類を表します。出版社(サーバーなど)は、サブスクライバーがいつでも関心を持っているイベントを関連するサブスクライバーに通知できます。デザインパターンに精通している友人は、これが23のデザインパターンの中でオブザーバーパターンに非常に似ていることを理解する必要があります。
同様に、RedisのPub/Subはメッセージ通信モードです。主な目的は、メッセージパブリッシャーとメッセージサブスクライバーを解除することです。 Pub/Sub Serverとして、Redisは購読者と出版社間のメッセージルーティングの機能を再生します。
上記の専門的な説明がわからない場合、それは問題ではありませんが、あまり理解していません。
簡単に言えば、ここにはチャネルの概念もあります。つまり、チャネルを意味します。たとえば、銀行チャネルを購読する場合、資金が変更された場合、銀行はそのチャネルを通じて情報を送信することを受け入れます。ここでは、銀行に情報を求めるのではなく、受動的に受け取っています。この例では、あなたはサブ(サブスクライバー)であり、銀行はPub(Pub)です。
プロジェクトアプリケーションシナリオ:
同じテクノロジーを知る前に、まずそのようなテクノロジーがどこで使用されるかを理解し、盲目的に物事を学ぶことができないといつも思っていました。
サブスクリプションの公開の機能を見ると、シンプルなライブチャットシステムを作成するのに最適です。もちろん、これはそれらの1つです。そのようなことは、私たちの開発にめったに関与しません。一般的に使用される別のシナリオをお知らせします。分散アーキテクチャでは、読み取りと書き込みの分離シナリオに遭遇することがよくあります。執筆プロセス中に、Redisを使用してサブスクリプションを公開して、書面による値が各読み取りプログラムにタイムリーに公開され、データの完全な一貫性が確保されます。たとえば、ブログのWebサイトでは、100人のファンがあなたを購読しています。新しい記事を投稿すると、ファンにメッセージをプッシュできます。要するに、多くのシーンがあり、探索する必要があります。 。
JavaがRedisを操作する方法を確認してください:
Redisはキャッシュデータベースであり、C/Sの構造でもあります。つまり、クライアントとサーバーです。一般的に、Javaでは、通常、Jedis(クライアント)を使用してRedis(サーバー)を操作します。操作する場合、2つの間に接続を確立する必要があります。データベースリンクのように、リレーショナルデータベースでは、接続プールを維持してリンク再利用を実現し、接続を確立および閉じる時間を節約します。したがって、ジェダスでは、ジェダイスプール(ジェダス接続プール)の概念もあり、私たちはすべてプールからの接続を使用しています。
コード:
Jedisを使用したい場合は、最初に依存関係を紹介します
<Dependency> groupId> redis.clients </groupId> <artifactid> jedis </artifactid> <バージョン> 2.9.0 </version> </dependency>
出版社(出版社)を作成する
パブリッククラスのパブリッシャーはスレッドを拡張します{プライベートファイナルジェダイスプールJedispool;パブリックパブリッシャー(Jedispool jedispool){this.jedispool = jedispool; } @Override public void run(){bufferedreader reader = new BufferedReader(new inputStreamReader(system.in)); jedis jedis = jedispool.getResource(); //接続プールから接続を取得しますwhile(true){string line = null; try {line = reader.readline(); if(! "quit" .equals(line)){jedis.publish( "mychannel"、line); // mychannelのチャンネルからメッセージを押します} else {break; }} catch(ioexception e){e.printstacktrace(); }}}}別のサブスクライバーを作成します
パブリッククラスのサブスクライバーはjedispubsubを拡張します{public subscriber(){} @override public void onmessage(String Channel、Stringメッセージ){//メッセージを受信し、system.out.println( "Redis公開メッセージ、チャンネル%s、メッセージ%s"、チャンネル、メッセージを受信)); } @Override public void onsubscribe(String Channel、int subscribedChannels){//チャンネルに登録されていないsystem.out.println( "subscribe redisチャンネルの成功、チャンネル%s、購読チャネル%d"、チャンネル、サブスクライバーチャネル)); } @Override public void onunsubscribe(String Channel、int subscribedChannels){// unsubscribedはSystem.out.println(string.format( "unsubscribe redis channel、channel%s、subscribedChannels%d"、チャネル、サブスクライバーチャネル)); }}ここでは、加入者がJedispubsubを継承して3つの方法を書き換える必要があります。目的のコメントが書かれていますが、非常に簡単です。
ここでサブスクライバーを定義するだけで、下のサブスクリプションチャネルに移動します。
パブリッククラスのサブスレッドはスレッドを拡張します{プライベートファイナルジェダイスプールJedispool;プライベート最終サブスクライバーサブスクライバー= new Subscriber();プライベート最終文字列チャンネル= "mychannel"; public subthread(jedispool jedispool){super( "subthread"); this.jedispool = jedispool; } @Override public void run(){system.out.println(string.format( "subscribe redis、channel%s、threadがブロックされます"、channel)); Jedis Jedis = null; try {jedis = jedispool.getResource(); //接続を取り出しますjedis.subscribe(subscriber、channel); //サブスクライブサブスクライブAPIを介して、パラメーターはサブスクライバーとチャネル名} catch(例外e){system.out.println(string.format( "subsrcibeチャネルエラー、%s"、e))です。 }最後に{if(jedis!= null){jedis.close(); }}}}最後に、別のテストクラスを書き、それを実行します。キーボードにメッセージを入力すると、サブスクライバーが出現方法をトリガーします
public class pubsubdemo {public static void main(string [] args){// redisサーバーに接続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)); subthread subthread = new subthread(jedispool); // subscriber subthread.start(); Publisher Publisher = new Publisher(Jedispool); // publisher publisher.start(); }}印刷の結果を参照してください
コードアドレスhttps://github.com/fangyong1421/redisを添付します
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。