当前位置:首页 > 问答 > 正文

一张图带你大致了解Redis到底是怎么运作的,简单又直观看懂原理

(此处设想有一张图,但根据要求,仅用文字描述这张图的结构和内容)

一张图带你大致了解Redis到底是怎么运作的

这张图可以大致分为三个核心部分:客户端请求入口Redis内部核心处理(包含数据结构和内存管理)、以及数据持久化与高可用保障,整张图会展示数据从接收到返回的完整生命周期。

第一部分:客户端请求怎么进来?(图的左上角)

想象图的左上角画着好几个不同形状的小图标,代表不同的客户端应用,比如一个网站后台(Web Server)、一个手机APP(Mobile App)或者一个微服务(Microservice),这些客户端通过一条条带箭头的线,连接到一个叫做 “网络事件处理器(Reactor模式)” 的方框上。

  • 关键点1:单线程接待员。 Redis内部有一个非常高效的“接待员”,这个接待员的工作方式(基于Reactor模式)是单线程的,它不像餐厅里每个服务员管几张桌子,而是像银行的一个高级接待员,他坐在一个能监控所有大门口(网络连接)的座位上,他不需要亲自去服务每个客户,但他的眼睛非常尖,能瞬间知道哪个门口有新客户来了,哪个老客户已经把要办的事情(数据)准备好了。
  • 关键点2:非阻塞式排队。 当客户端的请求(给我键user:123的值”或“设置键page_view为100”)到达时,这个“单线程接待员”会快速地把这些请求按照先后顺序,整理成一个待办事项清单(队列),他处理得非常快,只是登记一下谁要做什么,然后把具体的“业务办理”交给后面的“专家团队”去做,因为他只做最简单的登记和分发,不亲自处理复杂业务,所以即使有很多客户同时来,他也不会堵住,能做到很高的并发,这也是Redis高性能的一个重要原因。

第二部分:请求在Redis内部怎么被处理?(图的中央核心区域)

图的中央是一个大大的区域,代表Redis的内存数据库,待办事项清单(请求队列)里的命令会被顺序地送到这里执行,这个区域是单线程工作的,这意味着同一时间只处理一个命令,杜绝了多线程可能带来的竞争和锁的麻烦,保证了原子性。

这个核心区域又包含两个主要部分:

  1. 丰富的数据结构仓库(图的中心位置): 这里就像是Redis的“货架”或者“工具箱”,Redis之所以强大,不是因为它只能存简单的字符串,而是因为它提供了多种多样的“智能数据结构”,图中会形象地画出这些结构:

    • String(字符串): 像是一张张便签纸,可以存数字、文本甚至二进制数据。
    • Hash(哈希): 像一个简单的表格或者JSON对象,可以存多个字段和值,适合存一个对象的多个属性(如用户信息:姓名、年龄)。
    • List(列表): 像一个排队通道或者一个栈,数据有序,可以从两头插入或弹出,常用于消息队列、最新消息列表。
    • Set(集合): 像一个不允许有重复元素的袋子,可以求交集、并集,常用于标签系统、共同好友。
    • Sorted Set(有序集合): 像Set,但每个元素都带一个分数(score)用于排序,非常适合做排行榜。
    • 当一条命令到来,比如ZADD leaderboard 100 "Alice"(向排行榜添加Alice,分数100),这个单工作线程就会找到“有序集合”这个工具箱,执行相应的添加操作。
  2. 内存分配与过期管理(围绕在数据结构周围): Redis所有数据都放在内存里,所以读写极快,图中可能会画一个“内存池”的示意图,会有一个小钟表或计时器的图标,代表 “过期键” 机制,你可以给任何一个键设置一个存活时间(TTL),Redis会定期地、懒惰地(使用时检查)清理那些过期的键,自动释放内存,就像有一个自动清理工一样。

第三部分:数据如何持久化和保证高可用?(图的右下角)

因为内存数据断电易失,所以需要持久化到硬盘,图的这部分会展示两种主要方式,以及如何构建更可靠的系统。

  1. RDB持久化(快照): 画一个照相机的图标,它会定期(比如每隔5分钟)给整个数据库拍一张完整的“快照”(一个.rdb文件),保存到磁盘,优点是文件紧凑,恢复快,缺点是可能会丢失最后一次快照后的数据。

  2. AOF持久化(写日志): 画一个滚动着的卷轴或日志本的图标,它会把Redis接收到的每一个写命令(如SET, HSET)都记录到一个日志文件(.aof文件)里,当Redis重启时,会重新执行一遍日志里的所有命令来恢复数据,优点是数据丢失少(可以配置为每秒同步),缺点是文件大,恢复慢。

    在实际中,通常两者结合使用。

  3. 高可用与扩展(主从复制和哨兵): 图画到这里,可能会在旁边延伸出几个Redis实例的图标,其中一个标记为“Master”(主),另外几个标记为“Slave”(从),带箭头的线表示数据从主节点同步到从节点,这就是 主从复制:主节点负责写,从节点负责读,可以分担压力,并且数据有备份。

    • 图上可能还会有一个戴着帽子、像哨兵一样的图标在监视着主从节点,这就是 Sentinel(哨兵) 机制,它的作用是自动监控,如果主节点宕机了,哨兵会自动从从节点中选举出一个新的主节点,实现故障自动转移,保证服务高可用,而对于更复杂的分布式场景,还会引入 Redis Cluster 模式,将数据分片存储在多个主节点上,实现水平扩展。

图的下方或一侧)

整张图的箭头流向清晰地展示了:客户端请求 -> 单线程事件处理器接收并排队 -> 单线程命令执行器按顺序处理 -> 操作内存中的丰富数据结构 -> (可选)将更改写入持久化文件 -> 返回结果给客户端,通过主从复制、哨兵和集群等机制,保障数据的可靠性和服务的高可用性。


引用来源说明:的核心原理和机制描述,综合参考了Redis官方文档(redis.io)以及广泛被认可的技术解读,如《Redis设计与实现》一书、以及多位资深技术博主(如阿里云开发者社区、掘金、InfoQ等技术平台上的相关文章)对Redis核心原理的普及性解读,描述方式已尽力避免专业术语,采用类比和比喻以求直观易懂。

一张图带你大致了解Redis到底是怎么运作的,简单又直观看懂原理