从0到1构建一个稳定redis架构

news/2025/11/13 15:40:42/文章来源:https://www.cnblogs.com/xiaoqian01/p/19218188

从0到1搭建一个稳定的redis集群

1、单机版redis

  单机版的redis就是业务系统把他用作缓存使用,从mysql中查询数据然后写入到redis中,后面再查询的时候就会优先查询缓存。因为redis运行在内存中,所以速度很快。若业务体量不大,这样似乎可以满足需求了。但是随着业务体量的扩大,redis中存储的数据越来越多,此时业务对redis的依赖也越来越多。假设有一种情况,redis因为某些原因宕机了,请求都会打到mysql上,导致mysql压力突增。

  这时候能想到的做法可能是重启redis,但是因为redis运行在内存,重启后数据就丢失了,虽然可以正常工作,但没有任何数据,请求还是会打到mysql上。

  那么你就会想,有没有什么办法能让redis重启后数据仍然存在呢?那就是把数据写到磁盘上。

2、数据持久化

  那数据持久化怎么做呢?一个简单的思路是当每次redis进行写操作时,都把数据再存一份到磁盘上。但是这样做又会导致redis的压力增大,因为要写磁盘!

  那如何解决?优化思路是,redis的写内存由主线程来做,写内存完后就返回给客户端,redis用另外一个线程去写磁盘,这样就可以并发操作。

  那么换一个角度,我们用redis通常是用来做缓存,是为了把数据库中的数据写到缓存中,减轻查询的压力。那么就算redis中不存在这些数据,找数据库也能拿到,只是速度慢一些。所以就有了用【数据快照】的持久化方法。这种方式的优点是除了在【持久化】的时刻要把数据一次性写入磁盘,其他时间都不需要操作磁盘。

  以上两种方法就对应redis的两种持久化方案RDB和AOF。除此之外,还有以下这些特点:

  • RDB:只持久化某一时刻的快照数据到磁盘上(创建一个子进程来做)。用二进制+数据压缩的方式写磁盘,占用空间小,数据恢复也快。
  • AOF:每一次写都记录到磁盘(主线程写内存,根据策略可以配置由主线程还是子线程进行数据持久化)。AOF记录的是每一次写命令,数据最全,但文件体积大,数据恢复速度慢。
  • 如果业务对数据丢失不敏感,可以用RDB;若业务对数据完整性要求较高,采用AOF。但如果只用AOF也会出现问题:AOF记录每一次写操作,随着时间增长,AOF体积会越来越大。而且在数据恢复的时候也很慢。

  那么有什么办法,既可以缩小文件体积,又可以提升恢复速度呢?我们这里想一下,因为AOF记录是每一次写操作,对于同一个key可能会进行多次操作,那么是否可以只保留最终的结果呢?这就是【AOF rewrite】。我们可以定时rewrite,避免文件持续膨胀,这样在恢复的时候就可以缩短时间了。

  那有没有什么办法继续缩小AOF文件呢?那就是redis的【混合持久化】。具体来说,当AOF rewrite时,redis先以RDB格式在AOF文件中写入一个数据块找,再把这期间内产生的每一个写命令加入到AOF文件中。(redis4.0版本以上才支持混合持久化)。

  虽然现在已经把持久化的文件优化到最小了,但在恢复数据时依旧需要时间,这期间业务还是会受到影响,怎么办?一个实例宕机,只能用恢复数据来解决,是否可以部署多个redis实例,让这些实例数据保持同步,这样在一个redis宕机时可以在剩下的实例中选一个继续提供服务。【主从复制】

3、主从复制

  主从复制的形式就是会有一个主节点,以及一个/多个从节点。这样做的优势是:

  • 缩短不可用时间:master宕机可以手动把从节点提升为主节点。
  • 提升读性能:让从节点分担一部分读请求,提升整体性能。

  但这里存在一个问题,就是在主节点宕机时,需要手动把从节点提升为主节点,这个过程要花费时间。虽然比恢复数据要快,但还是要人工介入。那怎么去解决这个问题呢?——就有了接下来的【故障自动切换机制】。

4、 哨兵:故障自动切换

  我们在这种模式会引入观察者(哨兵),这个观察者不存储数据,只是会去实时监测节点的健康状态。

  但这里还存在一个问题,就是如果哨兵与主节点之间的网络除了问题,这个哨兵可能会误判!这里我们就可以部署多个哨兵,让它们部署在不同的机器上,一起监测主节点的状态,流程如下:

  • 多个哨兵隔一段时间就询问主节点是否正常。
  • 主节点正常恢复,表示状态正常,回复超时表示异常。
  • 一旦有一个哨兵判定master异常【主观下线】,就会问其他哨兵,若多个哨兵都认为主节点异常(设置一个阈值),就会判定主节点确实发生了故障【客观下线】。

  那么确定主节点故障后,由哪个哨兵进行主从切换呢?这里我们采用基于raft算法的领导选举规则:1)每个哨兵问其他哨兵,请求对方为自己投票;2)如果对方已经给别人投了票,就不能给他投票;若还没投票,就投给他;3)当第一个拿到超过半数投票的哨兵,当选为领导者。(分布式系统领域中的共识算法)

  那么随着时间推移,业务体量越来越大,此时这个架构模型还能承担这么大的流量吗?以前的做法是,主节点承担写操作,从节点承担读操作,但是当业务流量暴增的时候,主节点还能承受这么大的写流量吗?——这里就考虑到了【分片集群】。

5、 分片集群:横向扩展

  多实例如何组织?

  1)每隔节点各自存储一部分数据,所有节点的数据之和才是全量数据。

  2)指定一个路由规则,对不同的key把它路由到一个实例上进行读写。

   这种思路可以根据所在位置不同分为两类:

  1)客户端分片:key的路由规则放在客户端来做,但缺点是客户端需要维护这个路由规则。那如何不在业务代码耦合这些代码呢?就是把路由规则封装成一个模块,当要使用时集成这个模块就可以了。这就是redis Cluster采用的方案。(其中内置了哨兵逻辑,不用再部署哨兵)

  2)服务端分片:路由规则不放在客户端来做,而是在客户端和服务端之间引入一个【中间代理层】。这个代理会把你的请求根据路由规则,转发到对应的redis节点上,当集群实例不足以支撑更大的流量请求时可以横向扩容,添加新的redis实例提升性能。这些操作对于客户端来说都是无感知的。

 

 

参考:公众号水滴与银弹

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/964393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WireWorld 美国线世界:以专利科技重塑家用音响线缆的高保真革命

本文聚焦美国 WireWorld 线世界音响线缆,阐述其以 Cable Comparator 测试系统、DNA Helix 等专利技术为核心,凭借优质导体与绝缘材料,打造覆盖全场景的高保真产品矩阵。在音响发烧友的世界里,线缆被喻为 “音质的最…

bug的内容包含(重点)

所属产品、所属模块、所属项目、影响版本、操作系统、浏览器、当前指派、 bug类型、bug标题、重现步骤、相关需求、严重程度、优先级

从淘宝推荐到微信搜索:查找算法如何支撑亿级用户——动画可视化 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JVM系列——垃圾收集(1)

https://tech.meituan.com/2020/08/06/new-zgc-practice-in-meituan.htmlhttps://www.bilibili.com/video/BV1US4y1m7if/?spm_id_from=333.337.search-card.all.click&vd_source=99ec55b57f4eeedd9ed62c43e87cb6f…

2025年上海统招专升本平台权威推荐榜单:上海专升本/上海全日制专升/上海专升本培训平台精选

在学历提升需求持续增长的背景下,上海统招专升本已成为专科生获得本科学历的重要途径,选择优质的教育服务平台对考生备考至关重要。 近年来,上海地区统招专升本报考人数呈现稳步增长趋势。据教育统计数据显示,2024…

bug的类型

代码错误、界面优化、设计缺陷、配置相关、安装部署、性能问题、标准规范、测试脚本等

Codeforces 1120D Power Tree 题解 [ 蓝 ] [ 树形 DP ] [ 记忆化搜索 ] [ 图论建模 ] [ 最小生成树 ] [ 差分 ]

Power Tree 简单题,场上大概写了 50min。 Sol.1 树形 DP 对所有数变 \(0\) 的条件进行刻画,把子树的条件画在序列上。具体而言,我们求出树的中序遍历,选择一个节点等价于将其子树的区间 \([l, r]\) 分离出来,即在…

软件开发公司的隐形资产:为什么设计思维比代码量更值钱?

软件开发公司的隐形资产:为什么设计思维比代码量更值钱?代码量陷阱:软件开发的认知误区 在软件开发行业,“代码量”曾长期被当作衡量开发能力与项目价值的硬指标。不少企业将日均代码行数、功能模块数量作为考核标…

mybatis 打印执行SQL

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor; import lombok.extern.slf4j.Slf4j; imp…

10年湛江老导游私藏路线!除了生蚝,这座海滨之城还有多少惊喜等你发现

各位旅友,大家好! 我是导游小胡,在湛江这座美丽的海滨城市已经做了整整10年导游。今天,我想带大家看看,除了远近闻名的湛江生蚝,这座城市还有哪些让人流连忘返的风景。 湖光岩:世界地质奇观的秘密 作为世界第二…

ld.lld: error: undefined symbol: _impure_ptr 出现该问题解决办法

ld.lld: error: undefined symbol: _impure_ptr 出现该问题解决办法 解决方案命令 方法1:显式链接newlib gcc -specs=nosys.specs your_source.c -o output方法2:使用完整newlib gcc --specs=rdimon.specs -lrdimon …

5、MySQL 常用值

MySQL 常用值清单,涵盖了实际开发中最频繁使用的默认值、函数和属性。 一、自动编号与唯一标识 值/属性说明使用场景示例AUTO_INCREMENT 自动生成唯一递增整数 id INT AUTO_INCREMENT PRIMARY KEYUUID() 生成全局唯一…

2025年平移门行业十大服务商权威推荐榜单:专业选择指南

文章摘要 随着智能出入管理需求的持续增长,2025年平移门行业迎来新一轮技术革新与市场洗牌。本文基于行业数据与用户口碑,深度解析当前市场上十大平移门服务商的综合实力,为企事业单位提供权威参考。文末附专业选购…

2025年平移门服务商综合实力排行榜:十大优质企业深度解析

摘要 随着智能建筑和安防需求的不断提升,平移门行业在2025年迎来了新一轮发展机遇。本文基于市场调研数据、用户口碑评价和技术实力分析,为您呈现当前国内平移门服务商的综合排名。本排名旨在为有平移门采购需求的用…

气象数值预报高性能计算

气象数值预报高性能计算 参考:https://www.pianshen.com/article/55351864263/

北京婚姻诉讼律师精选推荐

面对婚姻诉讼,选择一位专业资深的律师是保障自身权益的关键一步。 当婚姻走向终点,复杂的法律程序、财产分割和子女抚养问题往往让人倍感压力。在北京这样的大都市,婚姻案件不仅数量庞大,而且涉及高净值财产、跨境…

使用性能监视器,收集硬件使用记录、自定义CPU 内存 网卡等使用历史记录

使用性能监视器 这是Windows自带的、最强大的性能历史记录工具。 1. 创建数据收集器集(用于记录历史数据)按 Win + R,输入 perfmon 并回车,打开“性能监视器”。在左侧窗格中,展开 “数据收集器集” -> “用户…

基于ComfyUI的Wan2.2文生视频显卡性能实测

我们就基于ComfyUI的预置工作流模板来测试Wan2.2的模型在3090和4090两张显卡下文生视频的效率。 我们写一个Python脚本来调用ComfyUI的API,通过工作流自动生成视频,并通过多次调用取平均的方式来统计比较3090和4090执…

2025年不锈钢列管式冷凝器源头厂家权威推荐榜单:化工冷凝器/新型风冷冷凝器/不锈钢冷凝器源头厂家精选

在化工流程工业持续升级的背景下,不锈钢列管式冷凝器以其优异的耐腐蚀性能和稳定的换热效率,正成为众多企业工艺升级的首选设备。 不锈钢列管式冷凝器作为化工生产中的关键换热设备,其市场需求与化工行业固定资产投…

10年恩施老导游小胡吐血整理!这5个景点不去等于白来,内含独家避坑指南

各位旅友,大家好! 我是小胡,在恩施这片美丽的土地上做了整整10年导游。今天想和大家聊聊,除了网红打卡点,恩施还有哪些值得细细品味的地方。恩施大峡谷:地球的年轮书第一次来大峡谷的游客,总会对着"一炷香…