Azure 托管 Redis 客户端库

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

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

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

客户端库 语言 GitHub存储库 文档
StackExchange.Redis C#/.NET 链接 此处有更多信息
生菜 爪哇岛 链接 此处有更多信息
Jedis 爪哇岛 链接
node_redis Node.js 链接
雷迪森 爪哇岛 链接 此处有更多信息
ioredis Node.js 链接 此处有更多信息

注释

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

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

Azure 托管 Redis 支持企业群集策略和 OSS 群集策略。 有关详细信息,请参阅此处(添加群集策略信息的链接)。

所有客户端库都使用企业群集策略来处理 Redis 实例。 但是,如果你使用 OSS 群集策略,请确保你选择的客户端库支持连接到群集化的 Redis 实例。

阻止的命令

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

多键命令

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

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

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

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

  • 集群信息
  • CLUSTER HELP
  • CLUSTER KEYSLOT
  • 群集节点
  • CLUSTER SLOTS

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

  • FLUSHALL
  • FLUSHDB

特定于客户端库的指南

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

雷迪森 (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

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

如何使用客户端库

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

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

后续步骤