本文介绍多个用于 Redis 的 Azure 缓存迁移方案。 可以将在本地或云虚拟机(VM)中运行的开源 Redis 缓存或托管缓存从其他云平台迁移到 Azure Redis 缓存。
还可以将一个 Azure Redis 缓存实例迁移到另一个实例。 如果只需将 Azure Redis 缓存从一个 Azure 区域移到另一个 Azure 区域,请参阅 将 Azure Redis 缓存实例移动到不同的区域。
开源 Redis 可以在许多计算环境中运行,例如专用本地数据中心或云托管的 VM。 其他托管平台(如 Amazon Web Services (AWS)托管 Redis 缓存服务,如 AWS ElastiCache。 通常,可以将这些 Redis 缓存迁移到 Azure Redis 缓存,以尽量减少中断或停机时间。
迁移选项
如何从一个缓存迁移到另一个缓存取决于缓存的位置以及应用程序如何与之交互。 下表列出了常用迁移策略。
选项 | 优点 | 缺点 |
---|---|---|
创建新缓存 | 最易于实现。 | 必须将数据重新填充到新缓存,这可能不适用于某些应用程序。 |
通过只读数据库(RDB)文件导出和导入数据。 | 与任何 Redis 缓存兼容。 | 生成 RDB 文件后写入到现有缓存的数据可能会丢失。 |
将数据双写入两个缓存。 | 没有数据丢失或停机,没有中断的缓存作,也更易于测试。 | 在较长时间内需要两个缓存。 |
以编程方式迁移数据。 | 完全控制数据的移动方式。 | 需要自定义代码。 |
创建新缓存
如果您不担心不间断的操作和潜在的数据丢失,将数据迁移到 Azure Redis 缓存的最简单方法是创建一个 Azure Redis 缓存实例,并将您的应用程序连接到该实例。 例如,如果将 Redis 用作数据库记录的后备缓存,则可以轻松地从头开始重新生成缓存。 此方法在技术上不是迁移。
实现此选项的一般步骤如下:
- 创建新的 Azure Cache for Redis 实例。 (可选)试用 Azure 托管 Redis。
- 更新应用程序以使用新的 Azure Redis 实例。
- 删除旧的 Redis 实例。
将数据导出到 RDB 文件并将该文件导入 Azure Cache for Redis
开源 Redis 定义了一种标准机制,用于拍摄缓存内存中数据集的快照,并将其保存到任何 Redis 缓存都可以读取的 RDB 文件。 Azure Redis 缓存 高级层 支持通过 RDB 文件将数据导入缓存实例。 可以使用 RDB 文件将数据从现有缓存传输到 Azure Redis 缓存。
重要
RDB 文件格式可以在 Redis 版本之间更改,并且可能无法保持向后兼容性。 导出的缓存的 Redis 版本应等于或低于 Azure Redis 缓存提供的版本。
实现此选项的一般步骤如下:
- 保存现有 Redis 缓存的快照。 可以将 Redis 配置为定期保存快照 ,或使用 SAVE 或 BGSAVE 命令手动保存一个快照。 RDB 文件默认命名为 dump.rdb ,位于 redis.conf 配置文件中指定的路径。
- 创建一个新的高级层 Azure Redis 缓存实例,该实例至少与现有缓存一样大。
- 将 RDB 文件复制到新缓存所在区域中的 Azure 存储帐户。 使用
AzCopy
可以完成此任务。 - 将 RDB 文件导入新缓存。 也可以使用 PowerShell Import-AzRedisCache cmdlet。
- 更新应用程序以使用新缓存实例。
注意
若要从另一个 Azure Redis 实例迁移数据,请先从该实例 导出 RDB 文件,或使用 PowerShell Export-AzRedisCache cmdlet。
在迁移过程中写入两个 Redis 缓存
可以暂时将应用程序设置为将数据写入现有缓存和新缓存,而不是在缓存之间移动数据。 应用程序最初从现有缓存中读取数据。 当新缓存具有足够的数据时,可以将应用程序切换到该缓存并停用旧缓存。
例如,假设使用 Redis 作为会话存储,应用程序会话将在七天后过期。 在写入这两个缓存 7 天后,你知道新缓存包含所有未过期的会话信息,并且可以从该时间点安全地依赖它。 然后,可以停用旧缓存。
实现此选项的一般步骤如下:
- 创建一个新的高级层 Azure Redis 缓存实例,该实例至少与现有缓存一样大。
- 修改应用程序代码以同时写入新实例和原始实例。
- 继续使用原始实例中的数据,直到新实例已足够填充数据。
- 更新应用程序代码以仅从新实例读取和写入。
- 删除原始实例。
以编程方式迁移
可以通过以编程方式从现有缓存读取数据并将其写入 Azure Redis 缓存,从而创建自定义迁移。 例如,可以使用开源 redis 复制 工具将数据从一个 Azure Redis 实例复制到另一个实例。
源代码是编写自己的迁移工具的有用指南。 还提供编译版本。
注意
Microsoft 尚未正式支持此工具。
实现此选项的一般步骤如下:
- 在现有缓存所在的同一区域中创建 Azure 虚拟机(VM)。 如果数据集很大,请选择功能强大的 VM 以减少复制时间。
- 创建新的 Azure Redis 缓存实例,并确保其为空。 该工具
redis-copy
不会覆盖目标缓存中的任何现有密钥。 - 使用应用程序,例如
redis-copy
自动将数据从源缓存复制到目标缓存。 复制过程可能需要一段时间,具体取决于数据集的大小。