Redis概述
Redis 核心解析
首先让我们先用一句话来了解 Redis 是什么:
Redis 是一个用 C 写的内存数据库,支持字符串、哈希、列表、集合和有序集合五种数据结构,靠单线程 + I/O 多路复用实现高性能,并通过 RDB/AOF 持久化与主从集群保障高可用,广泛用于缓存、分布式锁和实时排行榜。
然后让我们通过一句话来将 Redis 逐层分解:
- 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 原生字符串的缺陷。
-
- Redis 的 多种数据结构支持
-
为什么支持多种数据结构是一个优点?
-
类比生活:
就像生活中我们规定了许多计量单位(kg、km、Pa 等),而不是只用单一数字去体现一切——因为不同场景的需求不同。 -
核心价值:
多种数据结构解决了多业务场景下数据需求差异的问题,并支持原子性操作。
-
-
支持的数据结构包括:
- String(字符串)
- Hash(哈希)
- List(列表)
- Set(集合)
- Sorted Set / ZSet(有序集合)
!
-
额外优化机制:
-
自动编码切换:
Redis 会根据数据大小自动切换底层编码方式,避免内存资源浪费(“内存比黄金贵”)。 -
跳表(Skip List)支持:
用于 Sorted Set,显著提升范围查询性能。
-
- Redis 的 单线程 + I/O 多路复用 的高性能
-
什么是单线程?什么是 I/O 多路复用?为何这样设计?
-
单线程:
所有命令由一个线程顺序执行,任务必须按序完成。 -
I/O 多路复用:
允许单个线程同时监听多个网络连接的 I/O 事件(如读/写就绪)。 -
形象比喻:
100 个领导(I/O 请求)派活,你一个员工(单线程)挨个处理——“牛不吟马不叫,一个牛马收到收到”。
-
-
为什么不采用多线程提高效率?
- Redis 的瓶颈不在 CPU 计算,而在 网络 I/O 和内存访问。
- 多线程会引入 锁竞争、上下文切换、缓存失效 等“沟通成本”。
- 单线程模型消除了这些开销,让“一个超人”高效完成所有 I/O 操作。
- 关键前提:所有数据在内存中,操作极快;若在磁盘上,此模型无法成立。
-
注意:
Redis 并非完全单线程。自 6.0 起,网络 I/O(读写 socket)已支持多线程,但 命令执行仍为单线程,以保证原子性和简单性。
- 通过 RDB/AOF 持久化与主从集群保障高可用
-
什么是 RDB / AOF?
-
RDB(Redis Database):
快照式备份,类似“游戏存档”,定期将内存全量数据保存为二进制文件。 -
AOF(Append-Only File):
流水账日志,记录每个写操作命令,类似“操作录像”。 -
为何两者并用?
内存虽快,但断电即失。RDB 可快速恢复大部分数据;AOF 可重放最新操作,补全 RDB 之后的变更,二者结合实现 高性能 + 高可靠性。
-
-
什么是主从集群?
-
基本结构:
多台 Redis 服务器组成集群,一台为主节点(Master),其余为从节点(Slave)。 -
故障容灾:
主节点宕机后,系统会自动从小弟(从节点)中选出新主节点继续服务——“一炮打死一群?没关系,另一群一样的人立刻顶上”。 -
哨兵模式(Sentinel):
负责监控主从状态,自动完成 故障检测 → 客观下线判定 → 主从切换 → 通知客户端,确保“有人一直在岗”。
-
如果说前面的特性让 Redis 能干活,那么持久化与集群机制就是确保 Redis 能一直干活。

浙公网安备 33010602011771号