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
8.7.2. Eclipse Vert.x Redis クライアントの更新 リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、Redis クライアントの変更点を説明します。
8.7.2.1. Redis ロールおよびノードのオプションから非推奨の用語 slave (スレーブ) を削除 リンクのコピーリンクがクリップボードにコピーされました!
Redis ロールおよびノードオプションで使用されていた非推奨の slave (スレーブ) という用語が、replica に置き換えられました。
- ロール
-
以下の例は、Eclipse Vert.x 3.x リリースでの
SLAVEロールの使用を示しています。
// Before (3.x)
Redis.createClient(
rule.vertx(),
new RedisOptions()
.setType(RedisClientType.SENTINEL)
.addConnectionString("redis://localhost:5000")
.setMasterName("sentinel7000")
.setRole(RedisRole.SLAVE));
以下の例は、Eclipse Vert.x 4 での REPLICA ロールの使用を示しています。
// After (4.x)
Redis.createClient(
rule.vertx(),
new RedisOptions()
.setType(RedisClientType.SENTINEL)
.addConnectionString("redis://localhost:5000")
.setMasterName("sentinel7000")
.setRole(RedisRole.REPLICA));
- ノードのオプション
-
以下の例は、Eclipse Vert.x 3.x リリースでのノード型の
RedisSlavesの使用方法を示しています。
// Before (3.9)
options.setUseSlaves(RedisSlaves);
以下の例は、Eclipse Vert.x 4 でのノード型の RedisReplicas の使用方法を示しています。
// After (4.x)
options.setUseReplicas(RedisReplicas);