Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Redis 基础教程

1. Redis 是什么?

一个 基于内存 的 Key-Value 数据库,支持持久化,读写极快,常用于缓存、消息队列、分布式系统。

  • 延迟:微秒级
  • QPS:10w~50w+
  • 采用 I/O 多路复用 + 单线程模型(执行命令仍是单线程)

2. Redis 为什么这么快?(核心)

Redis 的高性能来自四点:

  1. 完全基于内存操作
  2. 单线程避免锁竞争
  3. I/O 多路复用(epoll)处理大量连接
  4. 高效的数据结构(不是“字符串”,是 SDS、自研的哈希表等)

3. Redis 是单线程吗?

  • 命令执行:单线程
  • 网络处理(从 6.0 开始):I/O 多线程
  • 后台任务(RDB/AOF 重写):独立线程

核心逻辑仍是单线程,这才保证高性能与一致性。

4. Redis Key-Value 的真实结构(不是简单字符串)

Redis 内部使用 对象系统 + 编码(encoding)

常见编码方式:

  • raw(普通字符串)
  • embstr(短字符串优化)
  • int(整数优化)
  • hash(ziplist / hashtable)
  • listpack、skiplist(ZSet)

即:Redis 是高度工程化的数据结构库

5. Redis 的五大基础数据结构

  1. String(字符串 / 数值 / 缓存)
  2. Hash(对象)
  3. List(队列)
  4. Set(去重集合)
  5. Sorted Set(排行榜、有序集合)

每个都有自己的底层结构和适用场景。

6. 高级数据结构

  • Bitmap(位图:签到、活跃用户)
  • HyperLogLog(UV 统计:固定 12KB)
  • GEO(地理位置:底层 ZSet)
  • Stream(消息队列:持久化 MQ)

7. Redis 持久化机制(RDB / AOF)

RDB(快照)

  • 周期性把内存保存为二进制文件
  • 恢复快
  • 会丢失最近一次快照之后的数据

AOF(Append-Only File)

  • 写命令追加日志
  • 丢数据少
  • 文件会越来越大(支持重写)

生产一般:RDB + AOF 混合模式(默认)

8. Redis 内存淘汰策略(非常重要)

当内存满了,Redis 要清理 key。

常见策略:

  • volatile-lru
  • allkeys-lru(做缓存常用)
  • volatile-ttl
  • noeviction(不建议使用,会直接报错)

9. Redis 线程模型

  • 核心命令执行:一条主线程
  • I/O:多线程(处理读写)
  • 持久化:后台线程

优点:无锁竞争、高性能、实现简单

缺点:命令阻塞会卡住整个 Redis(如 KEYS、SMEMBERS 大 key)

10. Redis Pipeline(管道)

一次发送多条命令,减少网络 RTT

适用于:批量写、批量读

注意:

  • Pipeline 不是原子操作
  • 不同于事务、Lua

11. Redis 事务

使用:

MULTI
...
EXEC

特点:

  • 不支持回滚(非 ACID)
  • 只保证命令按顺序执行

生产不常用,通常改用 Lua + 原子。

12. Lua 脚本

Redis 中最强大的原子操作方式:

优势:

  • 逻辑在服务器侧执行(减少 RTT)
  • 所有命令原子性执行

适用:

  • 分布式锁释放
  • 限流(滑动窗口)
  • 批处理

13. Redis Cluster(分布式集群)核心概念

  • 16384 槽位(hash slot)
  • key 按槽分配到不同节点
  • 自带主从和自动故障迁移

客户端必须支持 cluster 协议,否则无法访问分片数据。

14. 复制(主从同步)的核心原理

  • 第一次:全量同步(RDB 文件 + 增量命令)
  • 后续:增量同步(命令流)
  • 断点恢复:offset + runid

从库基本是只读,用于分流读请求。

15. 常见的缓存问题(核心概念)

15.1 缓存穿透

查询不存在的数据导致一直打到数据库

解决:布隆过滤器 / 空值缓存

15.2 缓存雪崩

大量 key 同时过期

解决:随机 ttl / 多级缓存

15.3 缓存击穿

热点 key 过期瞬间被高并发请求击溃

解决:互斥锁 / 永不过期 + 后台异步更新

⭐ 总结:记住这张图(Redis 核心概念一图流)

Redis = 内存数据库 + 高性能数据结构库 + 缓存系统 + 持久化引擎 + 分布式消息队列 + 分布式协调组件

核心能力包括:

  • 单线程极速架构
  • 高效数据结构
  • 多种持久化
  • 高可用(主从 / Sentinel / Cluster)
  • 高性能(百万 QPS)
  • 丰富模型(锁、限流、队列)