Files
cs-note/hhs/Redis/README.md
T
2026-05-24 21:18:14 +08:00

135 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags: [Redis, 缓存, NoSQL, 索引]
create time: 2026-05-15 18:10
---
# Redis 知识索引
## 概述
本文件夹汇总 Redis 相关的核心知识点,从数据结构到生产实践,覆盖日常开发和高阶场景。Redis 不只是「一个快」的键值存储——它的五种基础数据类型、高级数据结构(Sorted Set / Bitmap / HyperLogLog / Bloom Filter)、持久化机制、集群方案以及常见架构模式,构成了后端服务中不可或缺的基础设施层。
> [!QUESTION] 为什么用 Redis?
> - 纯内存读写,延迟在微秒级
> - 单线程模型避免了锁竞争和上下文切换
> - 丰富的数据结构可以直接表达业务语义(如排行榜用 Sorted Set)
> - 发布订阅、Lua 脚本、Stream 等提供了类消息队列的能力
## 知识体系
### 一、入门基础
| # | 主题 | 链接 |
|---|------|------|
| 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、扩容迁移 |
```mermaid
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 |
```mermaid
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 | — |
| 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]] — 整体知识图谱入口