2 行のコードで Redis メッセージ キューを実装し、シンプルで使いやすい

Redis リストのデータ型は、メッセージ キューとしての使用に非常に適しています。新しいメッセージをリストの最後に挿入し、リストの先頭からメッセージを削除して処理します。このソリューションはシンプルで使いやすく、複数のコンシューマーによるメッセージの並行処理をサポートします。

メッセージ キューは、次のように 2 行のコア コードで実装できます。

// 推送消息
redisTemplate.opsForList().leftPush(queueName, message);
// 接收消息
redisTemplate.opsForList().rightPop(queueName);

メッセージ キューを実装する具体的な手順は次のとおりです。

Redis 接続情報の構成

Spring Boot アプリケーションでは、application.properties または application.yml ファイルを使用して Redis 接続情報を構成できます。構成例は次のとおりです。

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=yourpassword

RedisTemplate Bean の作成

RedisTemplate Bean を作成して、後続のコードで Redis 操作を実行します。サンプルコードは次のとおりです。

@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<String, String> template = new RedisTemplate<>();
    template.setConnectionFactory(connectionFactory);
    template.setKeySerializer(new StringRedisSerializer());
    template.setValueSerializer(new StringRedisSerializer());
    return template;
}

メッセージキューロジックを実装する

RedisTemplate の opsForList() メソッドを使用して ListOperations オブジェクトを取得し、 leftPush() メソッドを使用してリストの先頭にメッセージを挿入し、 rightPop() メソッドを使用してリストの末尾からメッセージを削除します。処理。サンプルコードは次のとおりです。

@Autowired
private RedisTemplate<String, String> redisTemplate;

public void sendMessage(String queueName, String message) {
    redisTemplate.opsForList().leftPush(queueName, message);
}

public String receiveMessage(String queueName) {
    return redisTemplate.opsForList().rightPop(queueName);
}

メッセージキューの使用例を書く

例は次のとおりです。

@RestController
public class MessageController {

    @Autowired
    private RedisMessageQueue redisMessageQueue;

    @RequestMapping("/send")
    public String sendMessage(@RequestParam(value = "message") String message) {
        String queueName = "message-queue";
        redisMessageQueue.sendMessage(queueName, message);
        return "Message sent: " + message;
    }

    @RequestMapping("/receive")
    public String receiveMessage() {
        String queueName = "message-queue";
        String message = redisMessageQueue.receiveMessage(queueName);
        return "Message received: " + message;
    }
}

テストメッセージが送信されました:

curl http://localhost:8080/send?message=hello

メッセージ受信のテスト:

curl http://localhost:8080/receive
// 返回 Message received: hello

Redisメッセージキューの欠陥

Redis メッセージ キューは、Redis をベースに実装された軽量のメッセージ キューであり、効率性、信頼性、柔軟性などの利点がありますが、次の欠点もあります。

  1. 可用性の問題: Redis ノードがダウンしたり、ネットワークに障害が発生したりすると、メッセージが失われる可能性があります。この状況を回避するには、マスター/スレーブ レプリケーションまたはクラスター モードを使用して可用性を向上させる必要があります。
  2. キューの長さの問題: Redis はインメモリ データベースであるため、大量のメッセージを処理する場合はキューの長さがシステム リソースに与える影響に注意する必要があります。キューの長さが長すぎると、Redis ノードがクラッシュしたり、実行効率が低下したりする可能性があります。
  3. メッセージの永続性の問題: デフォルトでは、Redis メッセージ キューはメッセージの永続性をサポートしていません。メッセージの永続性を実装する必要がある場合は、メッセージを手動でディスクに書き込むか、永続化操作に Redis RDB および AOF ファイルを使用する必要があります。
  4. メッセージの順序の問題: Redis メッセージ キューはメッセージの順序を保証しません。メッセージの順序を保証する必要がある場合は、複数のキューを設定するか、他の方法を使用してこれを実現する必要があります。

関連コンテンツの拡充:(テクノロジーフロンティア)

伝統的な企業でも大規模なデジタル化が始まったこの10年で、社内ツールの開発過程では、大量のページ、シーン、コンポーネントなどが常に繰り返されていることが分かりました。このホイールはエンジニアの多くの時間を無駄にしました。

この種の問題に対処するために、ローコードでは、特定の繰り返し発生するシーンとプロセスをコンポーネント、API、データベース インターフェイスに具体化し、車輪の再発明を回避します。プログラマーの生産性を大幅に向上させます。

すべてのプログラマーが知っておくべきソフトウェア JNPF 高速開発プラットフォームを推奨します。業界をリードする SpringBoot マイクロサービス アーキテクチャを採用し、SpringCloud モードをサポートすることで、プラットフォームの拡張基盤が向上し、迅速なシステム開発、柔軟な拡張、シームレスな統合、高パフォーマンスのニーズを満たします。パフォーマンス アプリケーションなどの包括的な機能。フロントエンドとバックエンドの分離モデルを使用すると、フロントエンドとバックエンドの開発者が協力して異なる分野を担当できるため、トラブルがなく便利です。

公式 Web サイトを体験してください: https://www.jnpfsoft.com/?csdn

ローコード テクノロジについてまだ学習したことがない場合は、すぐに体験して学習できます。

おすすめ

転載: blog.csdn.net/Z__7Gk/article/details/132833659