跳到主要内容

01 什么是 Redis

本章目标:搞清楚 Redis 是什么、能干什么、为什么快。不需要动手,读完就行。

1. 一句话介绍

Redis 是一个把数据放在内存里的键值(Key-Value)数据库。

拆开来看这句话里的三个关键词:

  • 键值数据库:存取数据的方式非常简单——给每份数据起个名字(key),通过名字存进去、通过名字取出来。就像一个巨大的字典/Map。
  • 放在内存里:数据主要存在内存(RAM)中,而不是硬盘上。这是它快的根本原因。
  • 数据库:虽然数据在内存里,但它支持把数据落盘保存,重启后数据还能恢复,所以它是数据库,不只是缓存工具。

一个直观的对比:

MySQL 等关系型数据库Redis
数据存在哪硬盘内存
数据组织方式表、行、列key → value
查询方式SQL 语句简单命令(GET / SET 等)
单次操作速度毫秒级微秒级(快 100~1000 倍)
适合场景存储核心业务数据缓存、计数、排行榜等高频读写场景

💡 记住:Redis 不是用来替代 MySQL 的,而是和它配合使用的。绝大多数系统是"MySQL 存全量数据 + Redis 存热点数据"。

2. Redis 能用来干什么?

新手最常见的疑问是:"我为什么需要它?" 看几个真实场景:

场景一:缓存(最主要的用途)

假设你做了一个商品详情页,每次打开都要查一次 MySQL。当每秒有 1 万人访问时,MySQL 就扛不住了。

解决方案:第一次查询后,把结果存进 Redis。后面的请求直接从 Redis 拿,速度快 100 倍,MySQL 压力骤降。

用户请求 → 先查 Redis
├── 查到了 → 直接返回(99% 的请求走这里)
└── 没查到 → 查 MySQL → 结果写入 Redis → 返回

场景二:计数器

文章阅读量、视频点赞数这类数字,每秒可能变化几千次。用 MySQL 频繁 UPDATE 会非常吃力,而 Redis 一条 INCR 命令就能原子地 +1,轻松扛住。

场景三:排行榜

游戏积分排行榜、热搜榜。Redis 的"有序集合(ZSet)"天生就是为这个设计的:插入分数后自动排序,取前 100 名只要一条命令。

场景四:其他常见用途

  • Session 共享:多台服务器共享用户登录状态
  • 分布式锁:多个服务抢同一个资源时排队
  • 消息队列:简单的任务队列(List / Stream)
  • 去重统计:今天有多少独立用户访问(Set / HyperLogLog)

3. Redis 为什么这么快?

面试高频题,新手阶段记住三点即可:

  1. 纯内存操作:内存的读写速度比硬盘快几个数量级,这是最主要的原因。
  2. 单线程处理命令:Redis 用单个线程执行命令,没有多线程的锁竞争和上下文切换开销。而且因为快,单线程也不会成为瓶颈。(Redis 6.0 之后网络 IO 部分引入了多线程,但执行命令依然是单线程。)
  3. 高效的数据结构 + IO 多路复用:底层数据结构经过精心优化;用 epoll 这类技术让单线程能同时服务成千上万个连接。

💡 "单线程"带来一个重要特性:Redis 的每条命令都是原子的,不会出现两条命令交叉执行到一半的情况。后面讲计数器、分布式锁时会反复用到这个特性。

4. Redis 的五大核心数据类型(先混个脸熟)

Redis 的 value 不只是字符串,它支持多种数据结构,这是它比 Memcached 等其他缓存强大的地方:

类型长什么样典型用途
String(字符串)"hello" / "123"缓存、计数器
Hash(哈希){name: "张三", age: 20}存对象
List(列表)[a, b, c] 有序可重复队列、最新动态
Set(集合){a, b, c} 无序不重复去重、共同好友
ZSet(有序集合){a: 90分, b: 85分} 按分数排序排行榜

第二部分会逐个详细讲解,现在只需要知道"Redis 有五种常用类型"就够了。

5. 小结

  • Redis 是基于内存的键值数据库,速度是它的核心竞争力
  • 最主要的用途是缓存,此外还有计数、排行榜、分布式锁等
  • 不替代 MySQL,而是与之配合
  • 命令执行是单线程的,因此每条命令都是原子操作

下一章我们把 Redis 装起来 👉 02 安装与启动