前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 架构是如何演进么?为什么?

Redis 架构是如何演进么?为什么?

作者头像
码哥字节
发布2024-04-26 20:51:36
960
发布2024-04-26 20:51:36
举报
文章被收录于专栏:Java 技术栈Java 技术栈

Redis 现在已经十分流行,互联网几乎所有项目都会用到,在使用 Redis 时,你知道是如何保证稳定和高效的提供服务呢,它的架构演化路程是什么呢?

单机版 Redis

2010 年,Redis 1.0 版本发布,这个架构非常简单。你的业务系统可以把 Redis 作为缓存系统,从 MySQL 查询数据,接着写入到 Redis 中,之后业务系统再从 Redis 中读取这些数据。

就这样想享受 Redis 快到飞起的性能。然而,随着时间的推移,业务体谅发展起来,忽然有一天,Redis 宕机,所有的流量会打到 MySQL 上,严重的话还会压垮 MySQL。

数据持久化

于是赶紧重启 Redis,可是因为 Redis 都是把数据保存在内存中,尽管你把 Redis 重启了,之前的户数也丢失了。流量依然会打到 MySQL 上,咋办呢?

于是,2013 年,Redis 2.8 版本发布,迎来了数据持久化。我们总不能每次写数据都写磁盘,这样太慢了,于是 Redis 引入 RDB 内存快照的方式实现持久化。

定时的把当前 Redis Redis 中的数据,写到磁盘上的 RDB 文件就可以了。除了 RDB 内存快照文件做持久化以外,还支持 AOF 文件。也就是将每次写指令都写到 AOF 文件中。

主从复制

似乎经过上面的优化,你再也不担心 Redis 宕机了,即使宕机,也可以通过持久化文件快速恢复 Redis 中的数据。

可事情并没这么简单,如果一个一个实例宕机,我们是否可以部署多个 Redis 实例,并保持实时数据同步,当一个实例宕机,手动从剩下的实例提升为 master 继续提供服务实现高可用。

就这样,Redis 2.8 版本添加了主从复制功能。主从复制架构诞生了,master 处理实时读写请求,另一个叫做 slave 的节点同步 master 的数据。通过主从架构缩短不可用时间,并且还可以让 slave 节点分担一部分读请求,提升应用整体性能。

哨兵集群

有了主从复制就万无一失了么?答案是否定的。

因为我们通过人工介入来实现主从切换的,就必须要算上人的反应时间、操作时间,所以,在这期间你的业务应用依旧会受到影响。

如何把这个过程自动化?

我们可以引入一个检查员,让这个检察院实时监测 master 的健康状态,这个观察者就叫做哨兵。

2012 年,Redis 在 2.6 版本首次发布哨兵模式,直到 Redis 2.8 版本第二版才变成生产可用。

哨兵是 Redis 的一种运行模式,它专注于对 Redis 实例(主节点、从节点)运行状态的监控,并能够在主节点发生故障时通过一系列的机制实现选主及主从切换,实现故障转移,确保整个 Redis 系统的可用性。结合 Redis 的 官方文档,可以知道 Redis 哨兵具备的能力有如下几个:

  • 监控:持续监控 master 、slave 是否处于预期工作状态。
  • 自动切换主库:当 Master 运行故障,哨兵启动自动故障恢复流程:从 slave 中选择一台作为新 master。
  • 通知:让 slave 执行 replicaof ,与新的 master 同步;并且通知客户端与新 master 建立连接。

Cluster 集群

2015 年,Redis 3.0 发布,这是一个里程碑版本,新增了 Redis 集群。

使用 Redis Cluster 集群,主要解决了大数据量存储导致的各种慢问题,同时也便于横向拓展。

Redis 集群是一种分布式数据库方案,集群通过分片(sharding)来进行数据管理(「分治思想」的一种实践)。

将数据划分为 16384 的 slots,每个节点负责一部分槽位。槽位的信息存储于每个节点中。是一个无中心架构,并提供复制和故障转移功能。

展望未来

Redis 受欢迎主要原因是极高的性能以及丰富、方便使用的数据结构,这些简单好用的数据结构大幅度降低开发业务复杂度。大家都在紧贴用户需求,开发更多的数据结构。

  1. 2017 年,Redis 5.0 发布,该版本最大的变化,就是新增了 stream 数据类型。
  2. 2020 年,Redis 6.0 发布,该版本引入了网络 IO 多线程,Redis 模型主要分为网络模块和命令处理模块,作者认为正常情况下,redis 单线程模型中,网络模块往往成为瓶颈高发地;
  3. 2022 年,Redis 7.0 发布,该版本就是重构了 dict 结构,内存占用更小,内存成本会大大减少,RDB 版本不向下兼容。

博主简介

码哥,9 年互联网公司后端工作经验,InfoQ 签约作者、51CTO Top 红人,阿里云开发者社区专家博主,目前担任后端架构师主责,擅长 Redis、Spring、Kafka、MySQL 技术和云原生微服务。

喜欢的可以给个关注,也可以在公众号后台回复“资料”下载我原创 300 多页的《Redis 高手心法》。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-23,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 码哥字节 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单机版 Redis
  • 数据持久化
  • 主从复制
  • 哨兵集群
  • Cluster 集群
  • 展望未来
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com