【Azure Redis 缓存 Azure Cache For Redis】Redis支持的版本及不同版本迁移风险

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Azure Redis 缓存 Azure Cache For Redis】Redis支持的版本及不同版本迁移风险

问题描述

1. Azure Redis缓存支持的版本包括4.0以及6.0(预览)

这种情形下,可以使用PaaS服务提供的 Azure Redis 缓存(4.0版本)。Azure Redis对6.0的支持目前仍处于预览阶段,并且其使用的RESP协议也发生了变化。详情请见:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-overview

Azure Cache for Redis 基于开源软件 Redis 提供内存中数据存储。 Redis 极大地提高了在后端数据存储上使用的应用程序的性能和可伸缩性。 它将经常访问的数据保留在可快速读写的服务器内存中,从而能够处理大量应用程序请求。 Redis 为新式应用程序带来了关键的低延迟、高吞吐量数据存储解决方案。

Azure Cache for Redis 以托管服务的形式提供 Redis。 它提供安全的专用 Redis 服务器实例,且完全兼容 Redis API。 该服务由 Microsoft 管理并在 Azure 中托管,可供 Azure 内外的任何应用程序访问。

Azure Cache for Redis 可用作分布式数据或内容缓存、会话存储和消息中转站等。 它可单独部署,也可与其他 Azure 数据库服务(如 Azure SQL 或 Cosmos DB)一起部署。

 

2. 关于不同Redis版本间的迁移风险,从低版本(3.2)向高版本(4.0)迁移基本上不存风险。

具体说来,迁移的风险通常存在以下两个环节:

1) 现存客户端是否可以成功连接高版本的Redis?

Redis 3.2以及4.0均使用的是相同的RESP协议。因此,不存在兼容性问题,理论上只需要更新连接字符串指向新创建的Azure Redis资源即可。https://redis.io/topics/protocol

2) 是否会发生数据格式兼容性导致的内存数据丢失?

文档提供了关于从本地环境迁移至Azure Redis的多种选项,无需担心数据丢失(例如所有缓存中的数据都从DB中读入),则可以选择创建新的Redis。

https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-migration-guide

创建新的 Azure Cache for Redis

从技术上讲,这种方法不是迁移。 如果无需担心丢失数据,则迁移 Azure Cache for Redis 的最简单方法是创建缓存实例并将应用程序连接到该实例。 例如,如果将 Redis 用作数据库记录的后备缓存,则可以轻松地从头开始重新生成缓存。

实现此选项的一般步骤如下:

  1. 创建新的 Azure Cache for Redis 实例。
  2. 更新应用程序以使用新实例。
  3. 删除旧的 Redis 实例。

 

如果需要确保内存数据不丢失,高版本Redis向下兼容低版本的RDB文件格式。所以可选择文档中提供的其他两种不依赖于RDB格式的方式进行迁移。

https://github.com/sripathikrishnan/redis-rdb-tools/blob/master/docs/RDB_Version_History.textile

将数据导出到 RDB 文件并将该文件导入 Azure Cache for Redis

开源 Redis 定义了一种标准机制,用于获取缓存的内存中数据集的快照并将其保存到文件中。 此文件名为 RDB,可由另一个 Redis 缓存读取。 Azure Cache for Redis 高级层支持通过 RDB 文件将数据导入缓存实例。 可以使用 RDB 文件将数据从现有缓存传输到 Azure Cache for Redis。

3. 关于不同Redis之间连接数和性能的介绍

maxclients 对于每个 Azure Redis 缓存定价层都是不同的

  • 基本缓存和标准缓存
  • C0 (250 MB) 缓存 - 最多支持 256 个连接
  • C1 (1 GB) 缓存 - 最多支持 1,000 个连接
  • C2 (2.5 GB) 缓存 - 最多支持 2,000 个连接
  • C3 (6 GB) 缓存 - 最多支持 5,000 个连接
  • C4 (13 GB) 缓存 - 最多支持 10,000 个连接
  • C5 (26 GB) 缓存 - 最多支持 15,000 个连接
  • C6 (53 GB) 缓存 - 最多支持 20,000 个连接
  • 高级缓存
  • P1 (6 GB - 60 GB) - 最多支持 7,500 个连接
  • P2 (13 GB - 130 GB) - 最多支持 15,000 个连接
  • P3 (26 GB - 260 GB) - 最多支持 30,000 个连接
  • P4 (53 GB - 530 GB) - 最多支持 40,000 个连接

虽然每个缓存大小 最多 允许一定数量的连接,但与 Redis 的每个连接都具有其关联的开销。 此类开销的一个示例是,由于 TLS/SSL 加密而导致的 CPU 和内存使用。 给定缓存大小的最大连接限制假定轻负载缓存。 如果连接开销的负载 客户端操作的负载超出了系统容量,那么即使未超出当前缓存大小的连接限制,缓存也可能会遇到容量问题。

Azure Redis 缓存性能(参考官方说明:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-planning-faq#azure-cache-for-redis-performance

4. Redis 高可用性

Azure Redis针对标准版以上的redis 都是提供主从的功能,这是azure redis内置的功能:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-high-availability

Azure Cache for Redis 具有内置的高可用性。 其高可用性体系结构的目标是确保托管的 Redis 实例正常运行,即使其基础虚拟机 (VM) 受计划内或计划外中断的影响。 它提供的可用性百分比率要远高于将 Redis 承载在单个 VM 上的情况。

Azure Cache for Redis 使用多个称为“节点”的用于缓存的 VM 来实现高可用性。 它将这些节点配置为以协调的方式进行数据复制和故障转移。 它还会协调维护操作,例如 Redis 软件修补。 “标准”和“高级”层级中提供了各种高可用性选项

另外针对高级版Redis,也提供了持久化的功能,能够在出现异常状况(主从同时不工作)的情况下,保证数据不丢失,Azure Redis会在恢复时自动加载持久化数据。持久化参考文档: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-persistence

什么是数据暂留?

Redis 暂留可让你保留存储在 Redis 中的数据。 还可以获取快照并备份数据,以便在出现硬件故障时进行加载。 这相对于基本级别或标准级别是一项巨大优势,因为基本级别或标准级别将所有数据存储在内存中,在出现故障的情况下,如果缓存节点停机,则可能导致数据丢失。

Azure Redis 缓存使用以下模型提供 Redis 暂留:

  • RDB 暂留 - 配置 RDB(Redis 数据库)暂留以后,Azure Redis 缓存按照可配置的备份频率,将 Azure Redis 缓存的快照以 Redis 二进制格式暂留在磁盘上。 如果发生了灾难性事件,导致主缓存和副缓存都无法使用,则会使用最新快照重新构造缓存。 详细了解 RDB 暂留的优点缺点
  • AOF 暂留 - 配置 AOF(仅追加文件)暂留后,Azure Redis 缓存将每个写入操作保存到日志,此日志每秒至少保存到 Microsoft Azure 存储帐户一次。 如果发生了灾难性事件,导致主缓存和副缓存都无法使用,则会使用存储的写入操作重新构造缓存。 详细了解 AOF 暂留的优点缺点

暂留将 Redis 数据写入你拥有和管理的 Azure 存储帐户。 可在缓存创建过程中通过“新建 Azure Redis 缓存”边栏选项卡进行配置,也可以在现有高级缓存的“资源”菜单上配置。

5. Azure Redis突然连不上了,恢复了之后,数据清空了

在无法连接Redis期间,如果Redis有版本更新和重启,则有可能发生数据丢失的情况,这个与在Azure中使用的Redis的版本非常相关。如基础版(Basic),因为它是单个缓存节点,所以在重启后会出现数据清空的情况。因此建议基本版Redis一般是用在开发/测试环境中。而标准版及以上定价层的Redis底层是基于主/从复制的生产级别缓存服务,在出现版本更新或重启的时候不会出现主从节点同时发生。所以能尽可能避免数据丢失。

Redis 实例故障

Redis 是内存中数据存储。 数据保存在托管 Redis 缓存的物理机或虚拟机上。 “基本”层中的 Azure Cache for Redis 实例只在单个虚拟机 (VM) 上运行。 如果该 VM 关闭,则缓存中存储的所有数据都会丢失。

“标准”层和“高级”层中的缓存在复制的配置中使用两个 VM,能够以更高的复原能力防范数据丢失。 当此类缓存中的主节点发生故障时,副本节点将会接管工作并自动提供数据。 这些 VM 位于独立的容错域和更新域中,从而可以最大程度地减少主节点和副本同时发生故障的几率。 但是,如果发生严重的数据中心故障,这些 VM 仍可能会一起关闭。 此时,数据将会丢失,但这种情况非常罕见。

考虑使用 Redis 数据持久性异地复制来改善数据保护,防范此类基础结构故障。

故障转移的说明

当某个副本节点将其自身提升为主节点,且旧主节点关闭现有连接时,将发生故障转移。 主节点重新启动后,它会注意到角色的变化,从而将自身降级为副本节点。 然后,它将连接到新的主节点并同步数据。 故障转移可以是计划性的,也可以是非计划的。

计划性故障转移发生在系统更新(例如 Redis 修补或 OS 升级)和管理操作(例如缩放和重启)过程中。 由于节点会提前收到更新通知,因此它们可以协作交换角色,并在更改后快速更新负载均衡器。 计划性故障转移通常可在 1 秒内完成。

发生非计划性故障转移的可能原因是硬件故障、网络故障或主节点的其他意外中断。 副本节点可将自身提升为主节点,但该过程需要更长时间。 副本节点必须先检测到其主节点不可用,然后才能启动故障转移过程。 副本节点还必须验证此非计划性故障不是暂时性的或局部性的,以避免不必要的故障转移。 检测时出现的这种延迟意味着非计划性故障转移通常要在 10 到 15 秒内完成。

 

参考资料

用于 Redis 的 Azure 缓存: https://docs.azure.cn/zh-cn/azure-cache-for-redis/

如何配置 Azure Redis 缓存: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-configure#databases

Azure Cache for Redis 规划常见问题解答: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-planning-faq#azure-cache-for-redis-performance

如何为高级 Azure Redis 缓存配置数据暂留: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-persistence

Redis 实例故障: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-data-loss#redis-instance-failure

什么是故障转移? https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-failover#what-is-a-failover

 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
74 6
|
8天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
10天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
18天前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
98 22
|
17天前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
106 7
|
21天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
55 10
|
21天前
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
48 5
|
21天前
|
缓存 监控 NoSQL
Redis 缓存穿透及其应对策略
【10月更文挑战第23天】通过以上对 Redis 缓存穿透的详细阐述,我们对这一问题有了更深入的理解。在实际应用中,我们需要根据具体情况综合运用多种方法来解决缓存穿透问题,以保障系统的稳定运行和高效性能。同时,要不断关注技术的发展和变化,及时调整策略,以应对不断出现的新挑战。
42 4