8.7. Eclipse Vert.x Redis クライアントの変更点


Eclipse Vert.x 4 では、Redis クラスを使用して Redis クライアントと連携します。RedisClient クラスは利用できなくなりました。

注記
アプリケーションを RedisClient クラスから Redis クラスに移行しやすくするため、ヘルパークラス RedisAPI が利用できるようになりました。RedisAPI により、RedisClient クラスと同様の機能を複製できます。

新しいクラスには、プロトコルおよび Redis サーバー機能の機能強化がすべて含まれます。新規クラスを使用して以下を行います。

  • すべての Redis コマンドとの連携
  • 単一サーバーに接続
  • Redis Sentinel が有効になっている高可用性サーバーに接続
  • Redis のクラスター設定への接続
  • Redis 拡張機能での要求の実行
  • RESP2 および RESP3 サーバープロトコルサーバーの両方と通信

8.7.1. 既存の Redis クライアントから新規クライアントへの移行

既存のアプリケーションを新しい Redis クライアントに直接移行するか、またはヘルパークラス RedisAPI を使用して 2 つの手順でアプリケーションを移行できます。

アプリケーションを移行する前に、クライアントを作成する必要があります。

8.7.1.1. クライアントの作成

以下の例は、Eclipse Vert.x 3.x リリースでの Redis クライアントの作成方法を示しています。

// Create the redis client (3.x)
RedisClient client = RedisClient
  .create(vertx, new RedisOptions().setHost(host));

以下の例は、Eclipse Vert.x 4 で Redis クライアントを作成する方法を示しています。

// Create the redis client (4.x)
Redis client = Redis
  .createClient(
    vertx,
    "redis://server.address:port");

Eclipse Vert.x 4 では、クライアントは以下の標準の接続文字列構文を使用します。

redis[s]://[[user]:password@]server[:port]/[database]

8.7.1.2. アプリケーションの RedisAPI への移行

RedisAPI を使用して、接続の管理方法を決定できるようになりました。

  • クライアントがプールを使用する接続を管理できるようにします。

または、以下を実行します。

  • 新しい接続を要求すると、接続を制御できます。完了したら必ず接続を閉じるか、または返す必要があります。

クライアントを作成してから、要求を処理するためにアプリケーションを更新する必要があります。

以下の例は、Eclipse Vert.x 3.x リリースでクライアントを作成した後に要求を処理する方法を示しています。

// Using 3.x
// omitting the error handling for brevity
client.set("key", "value", s -> {
  if (s.succeeded()) {
    System.out.println("key stored");
    client.get("key", g -> {
      if (s.succeeded()) {
        System.out.println("Retrieved value: " + s.result());
      }
    });
  }
});

以下の例は、Eclipse Vert.x 4 でクライアントを作成した後に要求を処理する方法を示しています。この例では、ハードコーディングオプションの代わりに、キーと値のペアを設定するリストを使用します。コマンドで使用できる引数の詳細は、Redis SET コマンド を参照してください。

// Using 4.x
// omitting the error handling for brevity

// 1. Wrap the client into a RedisAPI
api = RedisAPI.api(client);

// 2. Use the typed API
api.set(
    Arrays.asList("key", "value"), s -> {
    if (s.succeeded()) {
      System.out.println("key stored");
      client.get("key", g -> {
        if (s.succeeded()) {
          System.out.println("Retrieved value: " + s.result());
        }
      });
    }
});

8.7.1.3. アプリケーションを Redis クライアントに直接移行

新しい Redis クライアントに直接移行する場合:

  • すべての新しい Redis コマンドを使用できる。
  • 拡張機能を使用できる。
  • ヘルパークラスから新しいクライアントへの変換が一部減る場合があり、アプリケーションのパフォーマンスが向上する可能性がある。

クライアントを作成してから、要求を処理するためにアプリケーションを更新する必要があります。

以下の例は、Eclipse Vert.x 3.x リリースでクライアントを作成した後に要求を設定および取得する方法を示しています。

// Using 3.x
// omitting the error handling for brevity
client.set("key", "value", s -> {
  if (s.succeeded()) {
    System.out.println("key stored");
    client.get("key", g -> {
      if (s.succeeded()) {
        System.out.println("Retrieved value: " + s.result());
      }
    });
  }
});

以下の例は、Eclipse Vert.x 4 でクライアントを作成した後に要求を処理する方法を示しています。

// Using 4.x
// omitting the error handling for brevity

import static io.vertx.redis.client.Request.cmd;
import static io.vertx.redis.client.Command.*;

client.send(cmd(SET).arg("key").arg("value"), s -> {
    if (s.succeeded()) {
      System.out.println("key stored");
      client.send(cmd(GET).arg("key"), g -> {
        if (s.succeeded()) {
          System.out.println("Retrieved value: " + s.result());
        }
      });
    }
});

Eclipse Vert.x 4 では、すべての対話は send(Request) メソッドを使用します。

8.7.1.4. 応答の移行

Eclipse Vert.x 3.x では、クライアントは、Redis 5 までの既知のコマンドをすべてハードコードするのに使用されると、応答もコマンドに従って入力されました。

新しいクライアントでは、コマンドはハードコーディングされません。応答のタイプは Response です。新しい Wire プロトコルにはさらに多くのタイプがあります。

古いクライアントでは、応答は以下のようになります。

  • null
  • Long
  • String
  • JsonArray
  • JsonObject (アレイ応答 INFO および HMGET の場合)

新しいクライアントでは、レスポンスは以下のタイプになります。

  • null
  • Response

Response オブジェクトには型コンバーターがあります。たとえば、以下のようなコンバーターがあります。

  • toString()
  • toInteger()
  • toBoolean()
  • toBuffer()

受信したデータが要求されたタイプでない場合、型コンバーターはこれを可能な限り最も近いデータ型に変換します。特定の型への変換ができない場合は、UnsupportedOperationException が出力されます。たとえば、String から List または Map への変換はできません。

Response オブジェクトは Iterable インターフェイスを実装するため、コレクションを処理することもできます。

以下の例は、MGET 要求の実行方法を示しています。

// Using 4.x
// omitting the error handling for brevity

import static io.vertx.redis.client.Request.cmd;
import static io.vertx.redis.client.Command.*;

client.send(cmd(MGET).arg("key1").arg("key2").arg("key3"), mget -> {
  mget.result()
    .forEach(value -> {
      // Use the single value
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.