Files
cs-note/hhs/Redis/README.md
T
2026-05-26 10:44:04 +08:00

6.3 KiB
Raw Blame History

tags, create time
tags create time
Redis
缓存
NoSQL
索引
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 —
Java lettuce / jedis —
GORM 钩子函数清理/更新缓存 hhs/GORM/09-钩子函数
Docker Compose depends_on 启动顺序 hhs/EXAM/Week05
Gin Session gin-contrib/sessions/redis hhs/EXAM/Week05

关联笔记