Azure Cache for Redis开发常见问题解答

本文提供了有关如何为Azure Cache for Redis开发的常见问题的解答。

重要

Azure Cache for Redis宣布其所有 SKU 的停用时间表。 建议尽快将现有Azure Cache for Redis实例移动到Azure托管 Redis。

迁移指南:

有关停用的更多详细信息:

如何开始使用Azure Cache for Redis?

可通过多种方式开始使用Azure Cache for Redis。

  • 可以查看适用于 .NETASP.NETJavaNode.jsPython 的教程之一。
  • 你可以查看与项目中使用的开发语言相匹配的示例客户端的客户端文档。 有许多 Redis 客户端可用于Azure Cache for Redis。 有关 Redis 客户端列表,请参阅 https://redis.io/clients

如果还没有Azure帐户,可以:

  • 打开Azure试用帐户。 你可以获得可用于试用付费Azure服务的信用额度。 即使额度用完,也可以保留帐户,并使用免费的Azure服务和功能。

StackExchange.Redis 配置选项有什么作用?

StackExchange.Redis 有很多选项。 本部分介绍一些常用设置。 有关 StackExchange.Redis 选项的详细详细,请参阅 StackExchange.Redis 配置

配置选项 说明 建议
AbortOnConnectFail (连接失败时终止) 如果设置为 true,则发生网络故障后无法重新建立连接。 设置为 false,让 StackExchange.Redis 自动重新连接。
ConnectRetry 初始连接期间重试连接的次数。 请参阅下面的注释寻求指导。
ConnectTimeout 连接操作的超时,以毫秒为单位。 请参阅下面的注释寻求指导。

通常情况下,使用客户端的默认值便已足够。 可以根据工作负荷微调选项。

重试

  • 对于 ConnectRetry 和 ConnectTimeout,一般指导原则是快速失败并重试。 此指导取决于工作负载,以及客户端发出 Redis 命令和接收响应平均花费的时间。
  • 让 StackExchange.Redis 自动重新连接,而不是检查连接状态,并由用户自己重新连接。 避免使用 ConnectionMultiplexer.IsConnected 属性
  • 雪球效应 - 你可能会遇到这样的问题:不断地重试,但每次重试都会加剧问题,导致永远无法恢复。 如果问题不断升级,请考虑使用微软模式与实践组在重试常规指南中描述的指数退避重试算法。

超时值

  • 考虑工作负载,并设置匹配的值。 如果要存储较大值,应将超时设置为更大的值。
  • AbortOnConnectFail 设置为 false,让 StackExchange.Redis 重新连接。
  • 使用一个长期使用的 ConnectionMultiplexer 实例,而不是为每个请求新建连接。
  • ConnectionMultiplexer.ClientName 属性设置为应用程序实例的唯一名称以进行诊断。
  • 对自定义工作负载使用多个 ConnectionMultiplexer 实例。
    • 如果应用程序中的负载不同,可以遵循此模型。 例如:
    • 可以使用一个多路复用器来处理大键。
    • 可以使用一个多路复用器来处理小键。
    • 可为连接超时设置不同的值,并为使用的每个 ConnectionMultiplexer 设置重试逻辑。
    • 在每个多路复用器上设置 ClientName 属性以帮助进行诊断。
    • 此指导意见可能会使每个 ConnectionMultiplexer 的延迟更流畅。

我可以使用哪些Azure Cache for Redis客户端?

Redis 的一大优势是有许多客户端,支持许多不同的开发语言。 如需最新的客户端列表,请参阅 Redis 客户端

从 Azure 门户获取缓存主机名、端口和访问密钥

若要连接到 Azure Redis 缓存,缓存客户端需要缓存主机名、端口和密钥。 在某些客户端中,这些项的名称可能略有不同。 按照以下说明从 Azure 门户获取缓存主机名、端口和密钥

  • 从缓存 “概述 ”页获取主机名。 主机名采用 <cachename>.redis.cache.chinacloudapi.cn 形式。

  • 选择 端口 旁边的链接以获取端口。 基本、标准和高级层缓存使用端口 6380 进行传输层安全性(TLS)连接,或端口 6379 进行非TLS连接。

  • 若要获取访问密钥,请选择“ 显示访问密钥”。

    Azure Redis 缓存属性的截图。

    “CacheKeys”窗格显示密钥。

    屏幕截图显示 Azure Redis 缓存访问密钥面板。

    还可以在左侧导航菜单中的“设置”下选择“身份验证”,然后选择“访问密钥”选项卡。

    Screenshot 显示 Azure Redis 缓存访问密钥.

是否有用于Azure Cache for Redis的本地模拟器?

没有用于Azure Cache for Redis的本地模拟器。 但可以在本地计算机上运行社区 Redis 的副本并连接到该副本,以获得与本地缓存模拟器类似的体验,如以下示例所示:

private static Lazy<ConnectionMultiplexer>
    lazyConnection = new Lazy<ConnectionMultiplexer> (() =>
    {
        // Connect to a locally running instance of Redis to simulate
        // a local cache emulator experience.
        return ConnectionMultiplexer.Connect("127.0.0.1:6379");
    });

public static ConnectionMultiplexer Connection
{
    get
    {
        return lazyConnection.Value;
    }
}

Redis 在 Linux 上本地运行,但也可以使用 适用于 Linux 的 Windows 子系统 子系统在 Windows 计算机上运行 Redis。 如需了解更多信息,请参阅 在 Windows 上安装 Redis。如果需要,可以选择配置 redis.conf 文件以更紧密地匹配 默认缓存设置 以便在线 Azure Cache for Redis。

如何运行 Redis 命令?

可以使用 Redis 命令 中列出的任何命令,但不包括 Azure Cache for Redis 中不支持的 Redis 命令 中列出的命令。 可以使用多个选项来运行 Redis 命令。

如果有标准或高级缓存,可以使用 Redis 控制台运行 Redis 命令。 Redis 控制台提供了在 Azure 门户中运行 Redis 命令的安全方法。

还可以使用 Redis 命令行工具。 若要使用它们,请参阅 将 Redis 命令行工具与 Azure Cache for Redis

为什么Azure Cache for Redis没有 MSDN 类库引用?

Azure Cache for Redis基于常用的开源内存中数据存储 Redis。 可以为多种编程语言选择使用多种类型的Redis客户端。 每个客户端都有自己的 API,它使用 Redis 命令调用Azure Cache for Redis实例。

由于每个客户端不同,因此 MSDN 无法在一个集中的位置提供类参考。 每个客户端维护自身的参考文档。 除了参考文档外,还有几个教程介绍了如何使用不同语言和缓存客户端开始使用Azure Cache for Redis。

是否可以将Azure Cache for Redis用作 PHP 会话缓存?

是的,若要将 Azure Cache for Redis 用作 PHP 会话缓存,请在 session.save_path 中指定Azure Cache for Redis实例的连接字符串。

重要

将Azure Cache for Redis用作 PHP 会话缓存时,必须对用于连接到缓存的安全密钥进行 URL 编码,如以下示例所示:

session.save_path = "tcp://mycache.redis.cache.chinacloudapi.cn:6379?auth=<url encoded primary or secondary key here>";

如果未对密钥进行 URL 编码,可能会收到包含如下消息的异常:Failed to parse session.save_path

有关将 Azure Cache for Redis用作 PhpRedis 客户端的 PHP 会话缓存的详细信息,请参阅 PHP 会话处理程序

什么是 Redis 数据库?

Redis 数据库就是同一 Redis 实例中的数据的逻辑隔离。 缓存内存在所有数据库之间共享,给定数据库的实际内存消耗取决于该数据库中存储的键/值。 例如,C6 缓存的内存为 53 GB,P5 的内存为 120 GB。 可以选择将全部 53 GB/120 GB 放置在一个数据库中,也可以将其分配到多个数据库中。

注意

在启用群集的情况下使用高级Azure Cache for Redis时,只有数据库 0 可用。 此限制是内部 Redis 限制,并不特定于Azure Cache for Redis。

了解其他 Azure Cache for Redis 常见问题解答