你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 托管 Redis(预览版)客户端库

Azure 托管 Redis(预览版)基于流行的内存中数据存储 Redis。 可以通过面向许多编程语言的各种 Redis 客户端访问 Azure 托管 Redis。 每个客户端库都有其自己的 API,该 API 使用 Redis 命令调用 Redis 服务器,但构建客户端库的目的是与任何 Redis 服务器通信。

每个客户端库都维护有自己的参考文档。 这些库还提供相应链接,用于通过客户端库开发人员社区获取支持。 Azure 托管 Redis 团队不负责开发任何客户端库,也不负责为任何客户端库提供支持。

以下建议基于热门程度以及是否有活跃的在线社区支持和回答你的问题。 我们仅建议使用最新的可用版本,并在新版本可用时定期升级。 这些库处于积极开发阶段,通常会发布新版本,其中包含对可靠性和性能的改进。

客户端库 语言 GitHub 存储库 文档
StackExchange.Redis C#/.NET 链接 此处有更多信息
Lettuce Java 链接 此处有更多信息
Jedis Java 链接
node_redis Node.js 链接
Redisson Java 链接 此处有更多信息
ioredis Node.js 链接 此处有更多信息

注意

你的应用程序可以使用与开源 Redis 兼容的任何客户端库连接到你的 Azure 托管 Redis 实例。

根据群集策略选择正确的客户端库

Azure 托管 Redis 支持企业群集策略和 OSS 群集策略。 有关详细信息,请参阅此处(添加群集策略信息的链接)。 所有客户端库都使用企业群集策略来处理 Redis 实例。 但是,如果你使用 OSS 群集策略,请确保你选择的客户端库支持连接到群集化的 Redis 实例。

被阻止的命令

Azure 托管 Redis 实例的配置和管理由 Microsoft 负责,这在默认情况下会禁用以下命令。 有关被阻止的命令的详细信息,请参阅群集管理命令兼容性

多键命令

由于 AMR 实例使用群集化配置,你可能会看到对多个键进行操作的命令上出现 CROSSSLOT 异常。 行为因使用的群集策略而异。 如果使用 OSS 群集策略,多键命令需要所有键都映射到同一个哈希槽

你可能还会看到 Enterprise 群集策略的 CROSSSLOT 错误。 在具有 Enterprise 群集的槽中,仅允许使用以下多键命令:DELMSETMGETEXISTSUNLINKTOUCH

在 Active-Active 数据库中,只能对同一槽中的键运行多键写入命令(DELMSETUNLINK)。 但是,在 Active-Active 数据库中的各个槽之间允许使用以下多键命令:MGETEXISTSTOUCH。 有关更多信息,请参阅数据库群集

针对企业群集策略被阻止的命令

  • CLUSTER INFO
  • CLUSTER HELP
  • CLUSTER KEYSLOT
  • CLUSTER NODES
  • CLUSTER SLOTS

针对活动异地复制被阻止的命令

  • FLUSHALL
  • FLUSHDB

特定于客户端库的指南

有关特定于客户端库的指南最佳做法的信息,请参阅以下链接:

Redisson (Java)

建议使用 redisson 3.14.1 或更高版本。 旧版本包含已知的连接泄漏问题,这些问题会导致故障转移后出现问题。 监视 Redisson 更改日志,因为其他已知问题可能会影响应用程序使用的功能。 有关详细信息,请参阅 CHANGELOGRedisson 常见问题解答

其他说明:

  • 与其他一些客户端不同,Redisson 默认采用“从副本读取”策略。 若要更改它,请修改“readMode”配置设置。
  • Redisson 有一个连接池策略,具有可配置的最小和最大设置,并且默认的最小值很大。 默认值很大可能会导致激进的重新连接行为,也称“连接风暴”。 若要降低风险,请考虑使用较少的连接,因为可以通过几个连接有效地管道化命令或命令批。
  • Redisson 的默认空闲连接超时为 10 秒,这会导致比理想状态更多的连接关闭和重新打开次数。

下面是建议的群集模式基线配置,你可以根据需要对其进行修改:

clusterServersConfig:
  idleConnectionTimeout: 30000
  connectTimeout: 15000
  timeout: 5000
  retryAttempts: 3
  retryInterval: 3000
  checkLockSyncedSlaves: false
  failedSlaveReconnectionInterval: 15000
  failedSlaveCheckInterval: 60000
  subscriptionsPerConnection: 5
  clientName: "redisson"
  loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
  subscriptionConnectionMinimumIdleSize: 1
  subscriptionConnectionPoolSize: 50
  slaveConnectionMinimumIdleSize: 2
  slaveConnectionPoolSize: 24
  masterConnectionMinimumIdleSize: 2
  masterConnectionPoolSize: 24
  readMode: "MASTER"
  subscriptionMode: "MASTER"
  nodeAddresses:
  - "redis://mycacheaddress:10000"
  scanInterval: 1000
  pingConnectionInterval: 60000
  keepAlive: false
  tcpNoDelay: true

有关如何使用 Rettl 对 JCache 的支持作为 AZURE 上的 IBM Liberty 中的 HTTP 会话状态存储的文章,请参阅在 Azure Kubernetes 服务 (AKS) 群集上将 Java EE JCache 与 Open Liberty 或 WebSphere Liberty 配合使用

如何使用客户端库

除了参考文档以外,还可以找到多篇教程,其中介绍了如何通过不同的语言和缓存客户端来开始使用 Azure 托管 Redis。

若要详细了解如何在教程中使用其中一些客户端库,请参阅以下文章:

后续步骤