tags, create time
| tags | create time | ||||
|---|---|---|---|---|---|
|
2026-05-15 18:10 |
Redis 知识索引
概述
本文件夹汇总 Redis 相关的核心知识点,从数据结构到生产实践,覆盖日常开发和高阶场景。Redis 不只是「一个快」的键值存储——它的五种基础数据类型、高级数据结构(Sorted Set / Bitmap / HyperLogLog / Bloom Filter)、持久化机制、集群方案以及常见架构模式,构成了后端服务中不可或缺的基础设施层。
[!QUESTION] 为什么用 Redis?
- 纯内存读写,延迟在微秒级
- 单线程模型避免了锁竞争和上下文切换
- 丰富的数据结构可以直接表达业务语义(如排行榜用 Sorted Set)
- 发布订阅、Lua 脚本、Stream 等提供了类消息队列的能力
知识体系
〇、架构总览
| # | 主题 | 链接 |
|---|---|---|
| 0.1 | 架构与线程模型 | hhs/Redis/00-Redis架构与线程模型 — 单线程事件循环、IO 多路复用、BIO 后台线程、Redis 6.0 多线程 IO |
一、入门基础
| # | 主题 | 链接 |
|---|---|---|
| 1.1 | 安装与部署 | hhs/Redis/01-安装与部署 — redis-server、redis-cli、配置文件、systemd 管理 |
| 1.2 | 核心数据类型与编码 | hhs/Redis/02-核心数据类型 — String/Hash/List/Set/ZSet 底层编码切换机制 |
| 1.3 | 基本命令速查 | hhs/Redis/03-基本命令速查 — 按类型分类的命令表 + Pipeline 用法 |
[!TIP] 理解编码胜过记忆命令 同一个数据类型在不同容量下会切换不同编码(如 Hash 在元素少时用 ziplist,多了切 hash table)。理解这一点才能写出真正高效的 Redis 代码。
二、持久化与高可用
| # | 主题 | 链接 |
|---|---|---|
| 2.1 | RDB 快照 | hhs/Redis/04-RDB持久化 — fork 原理、COW、触发时机 |
| 2.2 | AOF 追加日志 | hhs/Redis/05-AOF持久化 — everysec 策略、重写流程 |
| 2.3 | 混合持久化 | hhs/Redis/04-RDB持久化#Redis 混合持久化(推荐) — RDB 快照 + AOF 增量 = 快 + 准 |
| 2.4 ~ 2.5 | 主从复制与 Sentinel | hhs/Redis/06-主从与哨兵 — 全量/增量同步、故障转移流程 |
| 2.6 | Cluster 集群 | hhs/Redis/07-集群方案 — 哈希槽、Gossip、扩容迁移 |
flowchart LR
subgraph "Cluster 写入流程"
A["Client"] -->|"key → CRC16 → slot"| B["Slot 所在 Master"]
B -->|"重定向 MOVED/ASK"| C["目标 Master"]
C --> D["异步复制给 Replica"]
end
[!QUESTION] RDB 还是 AOF?怎么选?
- 对可用性要求极高:AOF everysec,最多丢 1 秒数据
- 对数据安全要求极高:AOF always(牺牲性能换安全)
- 混合持久化是最佳平衡点:重启时加载 RDB 块(快),回放 AOF 日志补齐(准)
三、数据结构进阶
| # | 主题 | 链接 |
|---|---|---|
| 3.1 | Sorted Set 高级玩法 | hhs/Redis/08-SortedSet精解 — 排行榜、延迟队列、Geo、优先级队列 |
| 3.2 | Bitmap | hhs/Redis/12-Bitmap — 签到、DAU 统计——每位一天,极致省内存 |
| 3.3 | HyperLogLog | hhs/Redis/13-HyperLogLog — 亿级 UV 去重统计,误差 < 0.1%,仅占 12KB |
| 3.4 | Bloom Filter | hhs/Redis/14-BloomFilter — 防缓存穿透、URL 去重——false positive 可接受 |
| 3.5 | Stream | hhs/Redis/15-Stream — 可靠消息队列,Consumer Group 消费组模型 |
| 3.6 | GEO | hhs/Redis/16-GEO — 附近的人、距离计算、围栏检测——底层就是 ZSet |
flowchart TD
S["业务数据变更"] --> A["MySQL 写入"]
A --> B{"是否需要同步缓存?"}
B -->|是| C["删除缓存 Key<br/>Cache-Aside"]
B -->|否| D["结束"]
C --> E["下次读取未命中"]
E --> F["回源 DB"]
F --> G["回填缓存"]
G --> D
四、缓存架构模式
| # | 主题 | 链接 |
|---|---|---|
| 4.1 | Cache-Aside | 先更 DB 再删缓存;读时懒加载回填 |
| 4.2 | Read/Write Through | 中间件自动管理一致性 |
| 4.3 | 缓存穿透 | 布隆过滤器 / 空值缓存 |
| 4.4 | 缓存击穿 | 互斥锁重建 / 逻辑过期异步刷新 |
| 4.5 | 缓存雪崩 | TTL 随机抖动 + 多级缓存 + 限流降级 |
| 4.6 | 一致性哈希 | 虚拟节点解决扩容抖动 |
hhs/Redis/10-缓存架构模式 — 完整实战文档包含 Go 示例代码和架构图
五、高级特性
| # | 主题 | 链接 |
|---|---|---|
| 5.1 | 事务 | MULTI/EXEC 不支持回滚 |
| 5.2 | Lua 脚本 | 原子执行多命令——分布式锁、限流器、状态机 |
| 5.3 | Pub/Sub & Stream | 实时通知 vs 可靠消息投递 |
| 5.4 | Pipeline | 批量发送减少 RTT,50~200 条/batch 最优 |
| 5.5 | Keyspace Notification | 过期事件订阅 |
| 5.6 | Memory Policy | allkeys-lru / lfu / noeviction 等 |
hhs/Redis/09-高级特性 — 完整实战文档包含 Lua 脚本模板和 Pipeline 用法
六、运维与性能调优
| # | 主题 | 链接 |
|---|---|---|
| 6.1 | 慢查询分析 | SLOWLOG GET,阈值可调 |
| 6.2 | 内存分析 | INFO memory、碎片率治理、Swap 排查 |
| 6.3 | 大 Key 治理 | SCAN 替代 KEYS、UNLINK 异步删除、拆分策略 |
| 6.4 | 连接池配置 | go-redis PoolSize、Timeout、Retry 参数调优 |
| 6.5 | 监控指标 | QPS、命中率、CPU、客户端数、延迟 |
| 6.6 | 备份与迁移 | BGSAVE、定时备份脚本、redis-shake、云服务迁移 |
| 6.7 | 安全加固 | requirepass、ACL、rename-command、TLS |
hhs/Redis/11-运维与性能调优 — 完整运维手册含监控脚本和安全清单
七、生态集成
| 技术栈 | 集成方式 | 相关笔记 |
|---|---|---|
| Go | go-redis / redigo | hhs/Redis/17-Go项目集成Redis |
| Java | lettuce / jedis | — |
| GORM | 钩子函数清理/更新缓存 | hhs/GORM/09-钩子函数 |
| Docker Compose | depends_on 启动顺序 | hhs/EXAM/Week05 |
| Gin Session | gin-contrib/sessions/redis | hhs/EXAM/Week05 |
关联笔记
- hhs/GORM/09-钩子函数 — GORM 生命周期中与 Redis 缓存同步的模式
- hhs/GORM/02-模型定义/UUID主键策略 — Snowflake WorkerID 依赖 Redis 协调
- hhs/EXAM/Week05 — Docker 中 Redis 容器管理与 Session 共享
- hhs/EXAM/Week03 — Session 存储选型对比(Redis vs 内存 vs DB)
- 一文吃透Redis — 整体知识图谱入口