在 Azure Redis 缓存中导入和导出数据

使用 Azure Cache for Redis 中的导入和导出功能作为数据管理操作。 使用 Azure Cache for Redis 数据库 (RDB) 快照将数据导入缓存实例或从缓存实例导出数据。 快照是使用 Azure 存储帐户中的 Blob 导入或导出的。

高级层级支持导入/导出:

  • 导出 - 可以将 Azure Redis 缓存 RDB 快照导出到页 Blob(高级层级)。
  • 导入 - 可以从页 Blob 或块 Blob 导入 Azure Redis 缓存 RDB 快照。

可以使用导入/导出在不同的 Azure Cache for Redis 实例之间进行迁移,或者在使用之前使用数据填充缓存。

本文提供使用 Azure Redis 缓存导入和导出数据的指南,并提供常见问题的解答。

可用范围

基本、标准 高级
可用

兼容性

  • 数据在高级层中导出为 RDB 页 Blob。
  • 运行 Redis 4.0 的缓存支持 RDB 版本 8 及更低版本。 运行 Redis 6.0 的缓存支持 RDB 版本 9 及更低版本。
  • 从较新版本的 Redis(例如 Redis 6.0)导出的备份无法导入到较旧版本的 Redis(例如 Redis 4.0)

Import

使用导入可从任何云或环境中运行的任何 Redis 服务器(包括 Linux、Windows 或者 Amazon Web Services 等任何云平台中运行的 Redis)引入与 Redis 兼容的 RDB 文件。 导入数据是使用预先填充的数据创建缓存的一种简单方式。 在导入过程中,Azure Redis 缓存从 Azure 存储将 RDB 文件加载到内存中,再将密钥插入到缓存中。

注意

在开始导入操作之前,请确保 Redis 数据库 (RDB) 文件已上传到 Azure 存储的页 blob 或块 blob 中,并与 Azure Redis 缓存实例在同一区域和订阅中。 如果使用托管标识进行身份验证,则存储帐户可以位于不同的订阅中。 有关详细信息,请参阅 Azure Blob 存储入门。 如果已使用 Azure Redis 缓存导出功能导出 RDB 文件,则 RDB 文件已存储在页 blob 中并已准备好进行导入。

  1. 若要导入一个或多个导出的缓存 Blob,请在 Azure 门户中浏览到你的缓存,然后在“资源”菜单中选择“导入数据” 。 在工作窗格中,可以看到“选择 Blob”,你可以在其中找到 RDB 文件。

    Screenshot showing Import data selected in the Resource menu.

  2. 选择“选择 Blob”,然后选择包含要导入的数据的存储帐户。

    Screenshot showing a list of storage accounts.

  3. 选择包含要导入的数据的容器。

    Screenshot showing list of containers from the previously chosen storage account.

  4. 通过选择 Blob 名称左侧的区域选择要导入的一个或多个 Blob,然后选择“选择”。

    Screenshot showing a blob from the container.

  5. 选择“导入”开始导入过程。

    重要

    在导入过程中,缓存客户端无法访问该缓存,并且将删除该缓存中的任何现有数据。

    Screenshot showing the Import button to select to begin the import.

    可以通过关注 Azure 门户中的通知或通过查看活动日志中的事件,来监视导入操作的进度。

    Screenshot showing the import progress in the notifications area.

导出

使用导出可以将 Azure Redis 缓存中存储的数据导出到与 Redis 兼容的 RDB 文件。 可以使用此功能将一个 Azure Redis 缓存实例中的数据移到另一个 Azure Redis 缓存实例或另一个 Redis 服务器。 在导出过程中,会在托管 Azure Cache for Redis 服务器实例的 VM 上创建临时文件。 然后,该文件将上传到所选的存储帐户。 导出操作完成后,无论状态为成功还是失败,都会删除临时文件。

  1. 若要将缓存的当前内容导出到存储,请在 Azure 门户中浏览到你的缓存,然后在“资源”菜单中选择“导出数据” 。 可以在工作窗格中看到“选择存储容器”。

    Screenshot showing Export data selected in the Resource menu

  2. 选择“选择存储容器”,随即显示可用存储帐户列表。 选择所需存储帐户。 存储帐户必须与缓存位于同一区域中。 如果使用托管标识进行身份验证,则存储帐户可以位于不同的订阅中。 否则,存储帐户必须与缓存位于同一订阅中。

    重要

    • 导出操作适用于页 Blob,经典存储帐户和资源管理器存储帐户都支持页 Blob。
    • Azure Cache for Redis 不支持导出到 ADLS Gen2 存储帐户。
    • Blob 存储帐户目前不支持导出。
    • 如果缓存数据导出到已启用防火墙的存储帐户失败,请参阅当存储帐户上启用了防火墙时如何导出?

    有关详细信息,请参阅 Azure 存储帐户概述

    Screenshot showing a list of containers in the working pane.

  3. 选择要保存导出的存储容器,然后执行“选择”。 若要使用新容器,请选择“添加容器”以先添加该容器,然后从列表中选择该容器。

    Screenshot of a list of containers with one highlighted and a select button.

  4. 键入一个 Blob 名称前缀,然后选择“导出”开始导出过程 。 blob 名称前缀用作此导出操作生成的文件名的前缀。

    Screenshot showing a blob name prefix and an Export button.

    可通过关注 Azure 门户中的通知或查看审核日志中的事件,来监视导出操作的进度。

    Screenshot showing the export progress in the notifications area.

    在导出过程中,缓存仍可供使用。

导入/导出常见问题解答

本部分包含有关导入/导出功能的常见问题解答。

哪些层支持导入/导出?

导入和导出功能仅在高级层级中可用。

能否从任何 Redis 服务器导入数据?

是的,可以导入从 Azure Cache for Redis 实例导出的数据。 可以从在任何云或环境中运行的任何 Redis 服务器导入 RDB 文件。 这些环境包括 Linux、Windows 或 Amazon Web Services 等云平台。 若要导入此数据,请从所需的 Redis 服务器将 RDB 文件上传到 Azure 存储帐户中的页 Blob 或块 Blob。 然后将其导入到高级 Azure Cache for Redis 实例中。

例如,您可能希望:

  1. 从生产缓存导出数据。

  2. 然后,将其导入缓存,该缓存用作测试或迁移的暂存环境的一部分。

重要

使用页 blob 时,要成功导入从非 Azure Redis 缓存的 Redis 服务器导出的数据,页 blob 大小必须在 512 字节边界上对齐。 有关用于执行任何所需的字节填充的示例代码,请参阅示例页 blob 上传

可以导入哪些 RDB 版本?

有关对导入使用的受支持 RDB 版本的详细信息,请参阅兼容性部分

导入/导出操作期间缓存是否可用?

  • 导出 - 缓存保持可用,可以在导出操作过程中继续使用缓存。
  • 导入 - 在导入操作开始时,缓存即变为不可用,在导入操作完成后,缓存变为可供使用。

能否对 Redis 群集使用导入/导出?

可以,并且可以在群集缓存和非群集缓存之间导入/导出。 由于 Redis 群集仅支持数据库 0,因此将不会导入 0 以外的数据库中的任何数据。 导入群集缓存数据时,密钥会在群集的分片之间重新分发。

导入/导出如何可用于自定义数据库设置?

某些定价层具有不同的数据库限制,因此,如果在缓存创建过程中为 databases 设置配置了自定义值,则在导入时需注意一些注意事项。

  • 当导入到的定价层的 databases 限制低于导出层的相应限制时:
    • 如果使用的是默认 databases 数(对于所有定价层来说为 16),则不会丢失数据。
    • 如果使用的是在要导入到的层的限制内的自定义 databases 数,则不会丢失数据。
    • 如果导出的数据包含超出新层限制的数据库中的数据,则将不会导入这些更高版本数据库中的数据。

导入/导出与 Redis 持久性有何区别?

Azure Cache for Redis 暂留功能主要是一项数据持续性功能。 相反,导入/导出功能设计为一种定期备份数据以进行时间点恢复的方法。

配置暂留后,缓存会根据可配置的备份频率将数据的快照暂留到磁盘。 数据以 Redis 专有的二进制格式写入。 如果发生了灾难性事件,导致主缓存和副本缓存都无法使用,则会使用最新快照自动还原缓存数据。

数据暂留专为灾难恢复而设计。 它不用作时间点恢复机制。

  • 在高级层上,数据暂留文件存储在 Azure 存储中,但无法将该文件导入其他缓存。

如果要定期备份数据以进行时间点恢复,建议使用导入/导出功能。 有关详细信息,请参阅如何为 Azure Cache for Redis 配置数据暂留

能否使用 PowerShell、CLI 或其他管理客户端自动执行导入/导出?

是的,请参阅高级层的以下说明:

在导入/导出操作期间收到超时错误。 它意味着什么?

如果在启动操作之前停留在左侧“导入数据”或“导出数据”的时间超过 15 分钟,则会收到错误,错误消息类似于以下示例 :

The request to import data into cache 'contoso55' failed with status 'error' and error 'One of the SAS URIs provided could not be used for the following reason: The SAS token end time (se) must be at least 1 hour from now and the start time (st), if given, must be at least 15 minutes in the past.

若要解决此错误,请在 15 分钟过去之前启动导入或导出操作。

在将数据导出到 Azure Blob 存储时遇到错误。 发生了什么情况?

导出仅适用于以页 blob 形式存储的 RDB 文件。 目前不支持其他 Blob 类型,包括带有热层和冷层的 Blob 存储帐户。 有关详细信息,请参阅 Azure 存储帐户概述。 如果使用访问密钥对存储帐户进行身份验证,则在存储帐户上设置防火墙例外往往会导致导入/导出过程失败。

当存储帐户上启用了防火墙时如何导出?

对于启用了防火墙的存储帐户,我们需要选中“允许受信任的服务列表中的 Azure 服务访问此存储帐户”,然后使用托管标识(系统/用户分配的),并为该对象 ID 预配存储 Blob 数据参与者 RBAC 角色。

有关详细信息,请参阅存储帐户的托管标识 - Azure Cache for Redis

我能否通过一个与缓存不同的订阅中的存储帐户导入或导出数据?

在“高级”层中,可以通过一个与缓存不同的订阅中的存储帐户导入和导出数据,但必须使用托管标识作为身份验证方法。 配置导入或导出时,需要选择包含存储帐户的所选订阅。

需要向存储帐户容器共享访问签名 (SAS) 令牌授予哪些权限才能允许导出?

为了成功导出到 Azure 存储帐户,共享访问签名 (SAS) 令牌必须具有以下权限:

  • read
  • add
  • create
  • write
  • delete
  • tag
  • move

后续步骤

了解有关 Azure Cache for Redis 功能的详细信息。