【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 用作数据库记录的后备缓存,则可以轻松地从头开始重新生成缓存。
实现此选项的一般步骤如下:
创建新的 Azure Cache for Redis 实例。
更新应用程序以使用新实例。
删除旧的 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
【Azure Redis 缓存 Azure Cache For Redis】Redis支持的版本及不同版本迁移风险的更多相关文章
- 【Azure Redis 缓存 Azure Cache For Redis】如何设置让Azure Redis中的RDB文件暂留更久(如7天)
问题描述 Azure Redis和所有的Redis服务一样,可以让你保留存储在Redis中的数据.以防万一在Redis服务器出现故障的时候能尽可能小的减少数据的损失.在Azure Redis服务中,默 ...
- 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis由低级别(C)升级到高级别(P)的步骤和注意事项, 及对用户现有应用的潜在影响,是否需要停机时间窗口,以及这个时间窗口需要多少的预估问题
问题描述 由于Azure Redis的性能在不同级别表现不同,当需要升级/缩放Redis的时候,从使用者的角度,需要知道有那些步骤? 注意事项? 潜在影响?停机事件窗口? 升级预估时间? 解决方案 从 ...
- spring boot redis 缓存(cache)集成
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- 【Azure Redis 缓存 Azure Cache For Redis】Redis性能问题,发现Server Load非常的高,导致正常连接/操作不成功
问题描述 在正常使用Azure Redis的服务中,突然发现Redis 的CPU达到了100%, 正常的使用中发现性能问题严重.从Redis的门户图表中,观察到CPU, Connection,Lent ...
- 【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
当使用Azure Redis高级版时候,为了能更好的保护Redis的安全,启用了虚拟网路,把Redis集成在Azure中的虚拟网络,只能通过虚拟网络VENT中的资源进行访问,而公网是不可以访问的.但是 ...
- 【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
问题描述 关于Azure Redis的性能问题,在官方文档中,可以查看到不同层级Redis的最大连接数,每秒处理请求的性能. 基本缓存和标准缓存 C0 (250 MB) 缓存 - 最多支持 256 个 ...
- 【Azure Redis 缓存 Azure Cache For Redis】Redis出现 java.net.SocketTimeoutException: Read timed out 异常
问题描述 在使用Azure Redis时,遇见Read Timed out异常, Redis的客户端使用的时jedis.问题发生时,执行redis部分指令出错,大部分get指令,set指令能正常执行. ...
- 【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection lost
问题情形 当在执行Redis一直指令时,有可能会遇见如下几种错误: 1) redis.clients.jedis.exceptions.JedisConnectionException: Could ...
- 【Azure Redis 缓存】Windows版创建 Redis Cluster 实验 (精简版)
简介 学习Redis Cluster的第一步,即本地搭建Redis Cluster.但是在Redis的官方文档中,是介绍在Linux系统中搭建Redis Cluster.本文主要介绍在Windows系 ...
- redis缓存数据库及Python操作redis
缓存数据库介绍 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站, 特 ...
随机推荐
- awk的简要使用
原文地址:https://www.lujun9972.win/blog/2020/08/23/在命令行进行简单的统计分析/index.html 目录 使用awk获取最小值.最大值.中位数和平均值 使用 ...
- [译]深入了解现代web浏览器(三)
本文是根据Mariko Kosaka在谷歌开发者网站上的系列文章https://developer.chrome.com/blog/inside-browser-part3/ 翻译而来,共有四篇,该篇 ...
- ST 表并查集小记🐤
ST 表维护并查集,在 $O(n \log n)$ 时间内处理 $[l_1,r_1]$ 内每个点依次向 $[l_2,r_2]$ 中的点连边(共连 $r_1-l_1+1$ 条边) 首先变成对于 $l_1 ...
- uni-app中使用map
uni-app中使用地图显示当前的位置 我们现在的需求是,显示用户在地图上所处的位置. 有的小伙伴可能会说,这个是不是需要接入第三方的地图. 其实是不需要的,从目前这个需求来看. 我们只需要引入uni ...
- js循环之map在工作中的使用
map函数会返回一个全新的数组哈(重要 在实际中很有用) map循环空那个数组时,不会报错的. 使用map的优势 可以返回一个全新的数组 可以用于过滤 ps==>:map里面不要有判断,否者会返 ...
- 【JS 逆向百例】猿人学系列 web 比赛第五题:js 混淆 - 乱码增强,详细剖析
逆向目标 猿人学 - 反混淆刷题平台 Web 第五题:js 混淆,乱码增强 目标:抓取全部 5 页直播间热度,计算前 5 名直播间热度的加和 主页:https://match.yuanrenxue.c ...
- 【JS 逆向百例】网洛者反爬练习平台第三题:AAEncode 加密
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...
- Windows 核心编程笔记 [2] 字符串
1. ANSI 和 Unicode Windows 中涉及字符串的函数有两个版本 1)ANSI版本的函数会把字符串转换为Unicode形式,再从内部调用函数的Unicode版本 2)Unicode版本 ...
- vim 从嫌弃到依赖(14)——快速跳转
之前介绍过众多的motion,根据移动范围来排序的话有 l.e.w.j等等,但是面对那么长的代码文件,仅仅使用这几个简单的motion不知道要移动多少次才能找到我想要的代码,这个速度有时候还不如我用鼠 ...
- TienChin 渠道管理-添加渠道
在我们平时新建一个全新的 Java 类,这个类需要存放的包不存在,可以使用如下的方式进行创建: 含义就是说,将 ChannelVO 这个类放在 vo 这个包当中,如果存在则不创建,存在就将新建的类放入 ...