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 门户检索主机名、端口和访问密钥

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

  • 若要获取访问密钥,请在缓存的左侧导航中选择“访问密钥”。

    Azure Cache for Redis keys

  • 若要获取主机名和端口,请在缓存的左侧导航栏中选择“属性”。 主机名的格式为 <DNS 名称>.redis.cache.chinacloudapi.cn

    Azure Cache for Redis properties

Azure Redis 缓存是否有本地模拟器?

Azure Cache for Redis 没有本地模拟器。 可以在本地计算机上通过 Redis 命令行工具来运行 redis-server.exe 的 MSOpenTech 版本。 然后,连接到它即可获得与本地缓存模拟器类似的体验,如以下示例所示:

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.conf 文件,以更好地匹配联机 Azure Cache for Redis 的默认缓存设置

如何运行 Redis 命令?

可以使用 Redis 命令中列出的任何命令,但 Azure Redis 缓存中不支持的 Redis 命令所列的命令除外。 可以使用多个选项来运行 Redis 命令。

  • 如果有标准或高级缓存,可以使用 Redis 控制台运行 Redis 命令。 Redis 控制台提供了一种在 Azure 门户中安全地运行 Redis 命令的方式。
  • 还可以使用 Redis 命令行工具。 若要使用这些工具,请执行以下步骤:
  • 下载 Redis 命令行工具
  • 使用 redis-cli.exe连接到缓存。 使用 -h 开关传入缓存终结点,使用 -a 传入密钥,如以下示例中所示:
  • redis-cli -h <Azure Cache for Redis name>.redis.cache.chinacloudapi.cn -a <key>

注意

Redis 命令行工具不适用于 TLS 端口,但你可以按照如何将 Redis 命令行工具用于 Azure Cache for Redis 一文中的说明,使用 stunnel 等实用程序将工具安全地连接到 TLS 端口。

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 Redis 缓存。

后续步骤

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