Redis概述

Redis 核心解析

首先让我们先用一句话来了解 Redis 是什么:

Redis 是一个用 C 写的内存数据库,支持字符串、哈希、列表、集合和有序集合五种数据结构,靠单线程 + I/O 多路复用实现高性能,并通过 RDB/AOF 持久化与主从集群保障高可用,广泛用于缓存、分布式锁和实时排行榜。

然后让我们通过一句话来将 Redis 逐层分解:

  1. Redis 是一个用 C语言 编写的 K-V 型内存数据库
  • 不是已经有传统的 DB 数据库如(MySQL、Oracle)这种了吗?为什么还需要 Redis?区别在哪里?

    • 生动类比:
      传统的数据库相当于你每次做题都要翻书找答案,而 Redis 呢是直接把答案记在脑子里,所以才会导致 Redis 这么快。
  • 为什么会这么快?

    • 轻量少负担:
      因为 Redis 是用 C 语言编写的直接操作内存的软件,根本不用像 Java 那样需要虚拟机以及垃圾回收等机制。

    • 直接作用在内存:
      传统的 DB 数据库都是对磁盘进行 I/O 操作,速度好比老爷车;而内存就像超跑,速度相差太大了——跑 1 次磁盘 I/O 的时间,足够完成十几次内存查询。

    • Redis(SDS)自研优化:
      Redis 自研了字符串结构(Simple Dynamic String, SDS),解决了 C 原生字符串的缺陷。

  1. Redis 的 多种数据结构支持
  • 为什么支持多种数据结构是一个优点?

    • 类比生活:
      就像生活中我们规定了许多计量单位(kg、km、Pa 等),而不是只用单一数字去体现一切——因为不同场景的需求不同。

    • 核心价值:
      多种数据结构解决了多业务场景下数据需求差异的问题,并支持原子性操作。

  • 支持的数据结构包括:

    • String(字符串)
    • Hash(哈希)
    • List(列表)
    • Set(集合)
    • Sorted Set / ZSet(有序集合)

    !

  • 额外优化机制:

    • 自动编码切换:
      Redis 会根据数据大小自动切换底层编码方式,避免内存资源浪费(“内存比黄金贵”)。

    • 跳表(Skip List)支持:
      用于 Sorted Set,显著提升范围查询性能。

  1. Redis 的 单线程 + I/O 多路复用 的高性能
  • 什么是单线程?什么是 I/O 多路复用?为何这样设计?

    • 单线程:
      所有命令由一个线程顺序执行,任务必须按序完成。

    • I/O 多路复用:
      允许单个线程同时监听多个网络连接的 I/O 事件(如读/写就绪)。

    • 形象比喻:
      100 个领导(I/O 请求)派活,你一个员工(单线程)挨个处理——“牛不吟马不叫,一个牛马收到收到”。

  • 为什么不采用多线程提高效率?

    • Redis 的瓶颈不在 CPU 计算,而在 网络 I/O 和内存访问。
    • 多线程会引入 锁竞争、上下文切换、缓存失效 等“沟通成本”。
    • 单线程模型消除了这些开销,让“一个超人”高效完成所有 I/O 操作。
    • 关键前提:所有数据在内存中,操作极快;若在磁盘上,此模型无法成立。
  • 注意:
    Redis 并非完全单线程。自 6.0 起,网络 I/O(读写 socket)已支持多线程,但 命令执行仍为单线程,以保证原子性和简单性。

  1. 通过 RDB/AOF 持久化与主从集群保障高可用
  • 什么是 RDB / AOF?

    • RDB(Redis Database):
      快照式备份,类似“游戏存档”,定期将内存全量数据保存为二进制文件。

    • AOF(Append-Only File):
      流水账日志,记录每个写操作命令,类似“操作录像”。

    • 为何两者并用?
      内存虽快,但断电即失。RDB 可快速恢复大部分数据;AOF 可重放最新操作,补全 RDB 之后的变更,二者结合实现 高性能 + 高可靠性。

  • 什么是主从集群?

    • 基本结构:
      多台 Redis 服务器组成集群,一台为主节点(Master),其余为从节点(Slave)。

    • 故障容灾:
      主节点宕机后,系统会自动从小弟(从节点)中选出新主节点继续服务——“一炮打死一群?没关系,另一群一样的人立刻顶上”。

    • 哨兵模式(Sentinel):
      负责监控主从状态,自动完成 故障检测 → 客观下线判定 → 主从切换 → 通知客户端,确保“有人一直在岗”。

如果说前面的特性让 Redis 能干活,那么持久化与集群机制就是确保 Redis 能一直干活。

posted @ 2026-01-23 16:24  亚麻青-LazySheep  阅读(2)  评论(0)    收藏  举报