This repository has been archived on 2026-05-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
all-in-kingsoft/hhs/Redis/README.md
T

135 lines
5.9 KiB
Markdown
Raw Normal View History

2026-05-17 00:06:11 +08:00
---
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 | 混合持久化 | Redis 7 特性: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 | 签到、DAU 统计——每位一天,极致省内存 |
| 3.3 | HyperLogLog | 亿级 UV 去重统计,误差 < 0.1%,仅占 12KB |
| 3.4 | Bloom Filter | 防缓存穿透、URL 去重——false positive 可接受 |
| 3.5 | Stream | 可靠消息队列,Consumer Group 消费组模型 |
| 3.6 | 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]] — 整体知识图谱入口