検索
ホームページデータベースRedisRedis パブリッシュおよびサブスクライブ メソッドを使用して単純なメッセージング システムを実装する方法

I. 基本的な使用法

1. 構成

SpringBoot 2.2.1.RELEASE を使用して、pom.xml に直接プロジェクト環境を構築します。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

に redis の依存関係を追加します。redis がデフォルト構成の場合、追加の構成を追加する必要はありません。次のように、application.yml で直接構成することもできます。以下

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password:

2. 利用姿勢

redisのパブリッシュ/サブスクライブは主に2つのコマンドを使用しますpublish/subscribe; SpringBootでパブリッシュとサブスクライブモードを使用するのは比較的簡単です, そして、RedisTemplate の実装を使用すると非常に便利です

a. メッセージの公開

@Service
public class PubSubBean {
    @Autowired
    private StringRedisTemplate redisTemplate;

    public void publish(String key, String value) {
        redisTemplate.execute(new RedisCallback<Object>() {
            @Override
            public Object doInRedis(RedisConnection redisConnection) throws DataAccessException {
                redisConnection.publish(key.getBytes(), value.getBytes());
                return null;
            }
        });
    }
}

b. サブスクリプション メッセージ

ここではメッセージ サブスクリプションを使用することに注意してください。 org.springframework.data.redis.connection.MessageListener 消費ロジックを実装する

public void subscribe(MessageListener messageListener, String key) {
    redisTemplate.execute(new RedisCallback<Object>() {
        @Override
        public Object doInRedis(RedisConnection redisConnection) throws DataAccessException {
            redisConnection.subscribe(messageListener, key.getBytes());
            return null;
        }
    });
}

c.テストケース

上記のパブリッシュとサブスクライブを検証するための簡単なテストケースを作成します。を理解してくださいMessageListener使用姿勢; 単純な WEB プロジェクトを作成し、2 つの REST インターフェイスを提供します

@RestController
@RequestMapping(path = "rest")
public class DemoRest {
    @Autowired
    private PubSubBean pubSubBean;

    // 发布消息
    @GetMapping(path = "pub")
    public String pubTest(String key, String value) {
        pubSubBean.publish(key, value);
        return "over";
    }

    // 新增消费者
    @GetMapping(path = "sub")
    public String subscribe(String key, String uuid) {
        pubSubBean.subscribe(new MessageListener() {
            @Override
            public void onMessage(Message message, byte[] bytes) {
                System.out.println(uuid + " ==> msg:" + message);
            }
        }, key);
        return "over";
    }
}

まず 2 つのコンシューマを作成し、次にメッセージを送信するときに両方を受信します。新しいコンシューマ または、メッセージを送信するとき、3 人全員がメッセージを受信できます

3. 使用手順とアプリケーション シナリオ

Redis のパブリッシュとサブスクライブは、比較的単純なシナリオにのみ適しています。これは、1 対 N をサポートする単純なパブリッシュおよびサブスクライブ モデルであることがわかり、送信されたメッセージはオンラインの消費者のみが取得できます (オンラインでない消費者については、次のようにしか言えません)。残念です) そして redis の場合、メッセージがプッシュアウトされたら終わりです。消費者が正常に消費できるかどうかについては、私たちは気にしません。

強調:

  • オンライン消費者のみがメッセージを受信できます

  • 消費者がメッセージを受信できるのは 1 回だけです

次の質問は次のとおりです。どのような状況で実行できますか? Redis を使用したパブリッシュとサブスクライブについてはどうですか?

メモリベースのキャッシュの無効化

二次キャッシュに reids メモリを使用することは、比較的一般的な方法であると言えます。システム負荷を効果的に改善しますが、問題も明らかです。特にアプリケーションが複数のサーバーにデプロイされている場合、メモリ内のキャッシュされたデータの無効化が問題になります。すべてのサーバーの特定のメモリ キャッシュを同時に無効にしたい場合は、次を使用します。 redis のパブリッシュ/サブスクライブは 1 つです より良い選択

SpringCloud Config 構成の更新

SpringCloud Config を構成センターとして使用している友人は、この問題に頻繁に遭遇する可能性があります。変更は問題です (もちろん、公式サポートは mq を介してバス経由で同期することです。また、Spring Boot admin を介してフラッシュを強制することもできます)

Redis パブリッシュ/サブスクライブの助けを借りて、これも問題です。構成の動的な更新を実現するための優れた代替手段 (後述) 特定の実装デモ、ご興味がございましたら、引き続き Yihuihui ブログをフォローしてください)

#redis キーが無効なサブスクリプション #キャッシュに Redis を使用する場合、通常は有効期限を設定します。Redis は有効期限イベントを提供します。もちろんデフォルトでは有効になっていません。また、subscribeを通じてキャッシュ無効化イベントにサブスクライブすることもできます

設定を変更しますそしてキー無効化イベント

notify-keyspace-events Ex
##を有効にします #redisを再起動した後、無効なイベント

subscribe __keyevent@0__:expired
をサブスクライブします

以上がRedis パブリッシュおよびサブスクライブ メソッドを使用して単純なメッセージング システムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Redis:データストアとサービスとしてどのように機能するかRedis:データストアとサービスとしてどのように機能するかApr 24, 2025 am 12:08 AM

redisactsassassadatastoreandaservice.1)asadatastore、itusesin memorystorage for fastorations、supporting variousdatastructureSlike-key-valuepairsandsortedsets.2)asaservice、iteasruascruascriptingrupting criptingforceptingpurplecomplecomplecprexoperations

Redis vs.その他のデータベース:比較分析Redis vs.その他のデータベース:比較分析Apr 23, 2025 am 12:16 AM

他のデータベースと比較して、Redisには次の独自の利点があります。1)非常に速い速度、および読み取り操作は通常、マイクロ秒レベルにあります。 2)豊富なデータ構造と操作をサポートします。 3)キャッシュ、カウンター、公開サブスクリプションなどの柔軟な使用シナリオ。 Redisまたはその他のデータベースを選択する場合、特定のニーズとシナリオに依存します。 Redisは、高性能および低遅延のアプリケーションでうまく機能します。

Redisの役割:データストレージと管理機能の調査Redisの役割:データストレージと管理機能の調査Apr 22, 2025 am 12:10 AM

Redisは、データストレージと管理において重要な役割を果たしており、複数のデータ構造と持続性メカニズムを通じて最新のアプリケーションの中核となっています。 1)Redisは、文字列、リスト、コレクション、注文されたコレクション、ハッシュテーブルなどのデータ構造をサポートし、キャッシュや複雑なビジネスロジックに適しています。 2)RDBとAOFの2つの持続方法を通じて、Redisは信頼できるストレージとデータの迅速な回復を保証します。

Redis:NOSQLの概念の理解Redis:NOSQLの概念の理解Apr 21, 2025 am 12:04 AM

Redisは、大規模なデータの効率的なストレージとアクセスに適したNOSQLデータベースです。 1.Redisは、複数のデータ構造をサポートするオープンソースメモリデータ構造ストレージシステムです。 2.キャッシュ、セッション管理などに適した、非常に速い読み取り速度と書き込み速度を提供します。 4.使用例には、基本的なキー値ペア操作と高度なコレクション重複排除関数が含まれます。 5.一般的なエラーには、接続の問題、データ型の不一致、メモリオーバーフローが含まれるため、デバッグに注意する必要があります。 6.パフォーマンス最適化の提案には、適切なデータ構造の選択とメモリ排除戦略の設定が含まれます。

Redis:実際のユースケースと例Redis:実際のユースケースと例Apr 20, 2025 am 12:06 AM

現実世界でのRedisのアプリケーションには、1。キャッシュシステムとして、データベースクエリを加速し、2。Webアプリケーションのセッションデータを保存するには、3。リアルタイムランキングを実装する4。メッセージ配信をメッセージキューとして簡素化する。 Redisの汎用性と高性能により、これらのシナリオで輝きます。

Redis:その機能と機能の調査Redis:その機能と機能の調査Apr 19, 2025 am 12:04 AM

Redisは、高速、汎用性、豊富なデータ構造のために際立っています。 1)Redisは、文字列、リスト、コレクション、ハッシュなどのデータ構造をサポートし、コレクションを注文します。 2)メモリを介してデータを保存し、RDBとAOFの持続性をサポートします。 3)Redis 6.0から始めて、マルチスレッドI/O操作が導入されました。これにより、高い並行性シナリオでパフォーマンスが向上しました。

RedisはSQLまたはNOSQLデータベースですか?答えが説明しましたRedisはSQLまたはNOSQLデータベースですか?答えが説明しましたApr 18, 2025 am 12:11 AM

redisisclassifiedsaNosqldatabasebasesakey-valuedataModelinsteaded ofthetraditionaldatabasemodel.itoffersspeedand andffficability、makingidealforreal-timeaplications andcaching、butmaynotbesbesutable fors cenariois requiring datientiantientioniity

Redis:アプリケーションのパフォーマンスとスケーラビリティの向上Redis:アプリケーションのパフォーマンスとスケーラビリティの向上Apr 17, 2025 am 12:16 AM

Redisは、データをキャッシュし、分散ロックとデータの持続性を実装することにより、アプリケーションのパフォーマンスとスケーラビリティを向上させます。 1)キャッシュデータ:Redisを使用して頻繁にアクセスしたデータをキャッシュして、データアクセス速度を向上させます。 2)分散ロック:Redisを使用して分散ロックを実装して、分散環境での操作のセキュリティを確保します。 3)データの持続性:データの損失を防ぐために、RDBおよびAOFメカニズムを介してデータセキュリティを確保します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。