8.7. Eclipse Vert.x Redis 客户端的更改


在 Eclipse Vert.x 4 中,使用 Redis 类用于 Redis 客户端。class RedisClient 不再可用。

注意
为了帮助您将应用程序从 RedisClient 迁移到 Redis 类,可以使用一个帮助程序类 RedisAPIRedisAPI 可让您复制与 RedisClient 类类似的功能。

新类包含协议和 Redis 服务器功能中的所有增强功能。使用新类来:

  • 使用所有 Redis 命令
  • 连接到单一服务器
  • 连接到启用了 Redis Sentinel 的高可用性服务器
  • 连接到 Redis 的集群配置
  • 在 Redis 扩展中执行请求
  • 与 RESP2 和 RESP3 服务器协议服务器通信

8.7.1. 将现有 Redis 客户端应用程序迁移到新客户端

您可以将现有应用程序直接迁移到新的 Redis 客户端,或者在两个步骤中使用帮助程序类 RedisAPI 来迁移应用程序。

在迁移应用程序前,您必须创建客户端。

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 中,用来硬编码所有已知的命令 till Redis 5 的客户端也根据 命令键入响应。

在新客户端中,命令不会硬编码。响应是 Response 类型。新的线路协议具有更多类型范围。

在较旧的客户端中,响应是以下类型:

  • null
  • Long
  • 字符串
  • JsonArray
  • JsonObject (适用于 INFOHMGET 数组响应)

在新客户端中,响应是以下类型:

  • null
  • 响应

Response 对象具有类型转换器。例如,转换器,例如:

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

如果收到的数据不是请求的类型,则类型转换器将其转换为最接近的数据类型。当无法转换到特定类型时,会引发 UnsupportedOperationException。例如,无法从 String 转换到 ListMap

您还可以处理集合,因为 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);
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.