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

本文提供有关如何开发 Azure Redis 缓存的常见问题的解答。

如何开始使用 Azure Redis 缓存?

有几种开始使用 Azure Redis 缓存的方法。

  • 用户可以查看适用于 .NETASP.NETJavaNode.jsPython 的教程之一。
  • 你可以查看与项目中使用的开发语言相匹配的示例客户端的客户端文档。 许多 Redis 客户端都可用于 Azure 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 属性
  • 雪球效应 - 可能会遇到这样的问题:不断地重试,但重试只是不断累积而永远无法恢复。 如果发生雪球效应,应该根据 Microsoft 模式和实践小组发布的一般重试指导原则中所述,考虑使用指数退让重试算法。

超时值

  • 考虑工作负载,并设置匹配的值。 如果要存储较大值,应将超时设置为更大的值。

  • AbortOnConnectFail 设置为 false,让 StackExchange.Redis 重新连接。

  • 使用一个长期使用的 ConnectionMultiplexer 实例,而不是为每个请求新建连接。 有关如何管理连接的示例,请参阅使用 RedisConnection 连接到缓存中的 RedisConnection 类。

  • ConnectionMultiplexer.ClientName 属性设置为应用程序实例的唯一名称以进行诊断。

  • 对自定义工作负载使用多个 ConnectionMultiplexer 实例。

    如果应用程序中有不同的负载,可以遵循此模型。 例如:

    • 可以使用一个多路复用器来处理大键。
    • 可以使用一个多路复用器来处理小键。
    • 可为连接超时设置不同的值,并为使用的每个 ConnectionMultiplexer 设置重试逻辑。
    • 在每个多路复用器上设置 ClientName 属性以帮助进行诊断。

    按照此指导操作可以更好地改进每个 ConnectionMultiplexer 的延迟。

可以使用哪些 Azure Redis 缓存客户端?

Redis 的一大优势是有许多客户端,支持许多不同的开发语言。 如需最新的客户端列表,请参阅 Redis 客户端。 有关涵盖多种不同语言和客户端的教程,请参阅如何使用 Azure Cache for Redis

获取主机名、端口和访问密钥

若要连接到你的 Azure Cache for Redis 服务器,缓存客户端需要该缓存的主机名、端口和访问密钥。 在某些客户端中,这些项的名称可能略有不同。 可以在 Azure 门户中获取主机名、端口和密钥。

  • 若要获取缓存的访问密钥,请执行以下操作:

    1. 在 Azure 门户中转到自己的缓存。
    2. 在服务菜单中的“设置”下,选择“身份验证”
    3. 在“身份验证”窗格上,选择“访问密钥”选项卡
    4. 若要复制访问密钥的值,请选择密钥字段中的“复制”图标。

    屏幕截图显示了如何查找和复制 Azure Cache for Redis 实例的访问密钥。

  • 若要获取缓存的主机名和端口,请执行以下操作:

    1. 在 Azure 门户中转到自己的缓存。
    2. 在服务菜单中,选择“概述”。
    3. 在“Essentials”下,对于“主机名”,请选择“复制”图标以复制主机名值。 主机名值的形式为 <DNS name>.redis.cache.chinacloudapi.cn
    4. 对于“端口”,请选择“复制”图标以复制端口值。

    屏幕截图显示如何查找和复制 Azure Cache for Redis 实例的主机名和端口。

Azure 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 Redis 缓存中不支持的 Redis 命令所列的命令除外。 可以使用多个选项来运行 Redis 命令。

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

还可以使用 Redis 命令行工具。 要使用它们,请参阅将 Redis 命令行工具与 Azure Redis 缓存配合使用

Azure Redis 缓存为什么没有 MSDN 类库参考?

Azure Cache for Redis 基于热门开源内存中数据存储 Redis。 对于许多编程语言而言,可以通过各种 Redis 客户端。 每个客户端有自身的 API,用于通过 Redis 命令调用 Azure Redis 缓存实例。

由于每个客户端不同,因此 MSDN 无法在一个集中的位置提供类参考。 每个客户端维护自身的参考文档。 除了参考文档以外,还可以参阅多篇教程,其中介绍了如何通过不同的语言和缓存客户端来开始使用 Azure Cache for Redis。 若要访问这些教程,请参阅如何使用 Azure Redis 缓存以及它在内容列表中的同级文章。

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

可以。若要使用 Azure Redis 缓存作为 PHP 会话缓存,请在 session.save_path 中指定 Azure Redis 缓存实例的连接字符串。

重要

使用 Azure 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

有关在 PhpRedis 客户端中使用 Azure Redis 缓存作为 PHP 会话缓存的详细信息,请参阅 PHP Session handler(PHP 会话处理程序)。

什么是 Redis 数据库?

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

注意

使用启用了群集功能的高级 Azure Redis 缓存时,仅数据库 0 可用。 此限制是固有的 Redis 限制,并不特定于 Azure Cache for Redis。

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