--- 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
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]] — 整体知识图谱入口