Redis Map
flowchart LR
Redis((📕 Redis))
Redis --> A1["一、基础核心"]
Redis --> A2["二、持久化(重中之重)"]
Redis --> A3["三、过期策略 & 内存淘汰策略"]
Redis --> A4["四、高可用: 主从 + 哨兵 + Cluster集群"]
Redis --> A5["五、经典面试场景问题"]
Redis --> A6["六、性能底层高频考点"]
Redis --> A7["七、运维&线上生产规范"]
A1 --> A1_B1[是什么:内存型KV数据库、单线程IO多路复用]
A1 --> A1_B2[5大基础数据结构+底层]
A1 --> A1_B3[高级结构:BitMap、HyperLogLog、Geo、Stream]
A1_B2 --> A1_B2_C1[String:SDS、缓存、计数器、分布式ID]
A1_B2 --> A1_B2_C2[List:双向链表、栈、消息队列、阻塞队列]
A1_B2 --> A1_B2_C3[Hash:ziplist/hashtable、存储对象、用户信息]
A1_B2 --> A1_B2_C4[Set:哈希表、去重、交集并集、好友列表]
A1_B2 --> A1_B2_C5[ZSet:跳表、排行榜、权重排序、延时队列]
A2 --> A2_B1[RDB]
A2 --> A2_B2[AOF]
A2 --> A2_B3[线上最佳实践:RDB+AOF混合使用]
A2_B1 --> A2_B1_C1[机制:定时全量二进制快照]
A2_B1 --> A2_B1_C2[触发:save配置、bgsave、shutdown、主从同步]
A2_B1 --> A2_B1_C3[优点:文件小、恢复快、性能损耗低]
A2_B1 --> A2_B1_C4[缺点:丢最后一次快照后数据、大fork耗时]
A2_B2 --> A2_B2_C1[机制:记录写命令日志、追加写入]
A2_B2 --> A2_B2_C2[刷盘策略:always/everysec/no]
A2_B2 --> A2_B2_C3[AOF重写:解决日志膨胀、子进程合并命令]
A2_B2 --> A2_B2_C4[优点:数据安全、最多丢1秒数据]
A2_B2 --> A2_B2_C5[缺点:文件大、恢复慢、性能略差]
A3 --> A3_B1[过期键删除三种方式]
A3 --> A3_B2["8大内存淘汰策略(高频4个)"]
A3_B1 --> A3_B1_C1[惰性删除:访问时才删,省CPU,浪费内存]
A3_B1 --> A3_B1_C2[定期删除:轮询抽样删除,折中方案]
A3_B1 --> A3_B1_C3[无定时主动删除,靠淘汰兜底]
A3_B2 --> A3_B2_C1[noeviction:默认,内存满直接报错]
A3_B2 --> A3_B2_C2[allkeys‑lru:全局LRU,最常用]
A3_B2 --> A3_B2_C3[volatile‑lru:只淘汰带过期key]
A3_B2 --> A3_B2_C4[allkeys‑random:全局随机删除key]
A3_B2 --> A3_B2_C5[allkeys‑lfu:全局LFU]
A3_B2 --> A3_B2_C6[volatile‑lfu:只淘汰带过期key]
A3_B2 --> A3_B2_C7[volatile‑random:只随机删除带过期key]
A3_B2 --> A3_B2_C8[volatile‑ttl:优先淘汰剩余过期时间最短的key]
A4 --> A4_B1[4.1 主从复制]
A4 --> A4_B2[4.2 哨兵Sentinel]
A4 --> A4_B3["4.3 Redis Cluster集群(分片集群)"]
A4_B1 --> A4_B1_C1[是否自动转移故障:不能]
A4_B1 --> A4_B1_C2[数据分片:不分片,全局一份]
A4_B1 --> A4_B1_C3[写扩容:单节点写,不可扩容]
A4_B1 --> A4_B1_C4[适合场景:数据备份、读写分离、测试环境]
A4_B2 --> A4_B2_C1[是否自动转移故障:自动]
A4_B2 --> A4_B2_C2[数据分片:不分片,全局一份]
A4_B2 --> A4_B2_C3[写扩容:单节点写,不可扩容]
A4_B2 --> A4_B2_C4[适合场景:中小型项目,数据量不大,要求高可用]
A4_B3 --> A4_B3_C1[是否自动转移故障:自动]
A4_B3 --> A4_B3_C2[数据分片:分片存储,数据分散多节点]
A4_B3 --> A4_B3_C3[写扩容:多主并行写,可以扩容]
A4_B3 --> A4_B3_C4[适合场景:大数据量,高并发,需要扩容存储和写入]
A4_B3 --> A4_B3_C5[哈希槽:16384个槽位,节点分配槽存储数据]
A4_B3 --> A4_B3_C6["哈希槽计算:CRC16(key) mod 16384"]
A4_B3 --> A4_B3_C7[集群扩容缩容:在线迁移槽,不停机]
A5 --> A5_B1[5.1 缓存三大问题]
A5 --> A5_B2[5.2 分布式锁]
A5_B1 --> A5_B1_C1[缓存穿透:查不存在数据、绕过缓存查库 方案:布隆过滤器、空值缓存、参数校验]
A5_B1 --> A5_B1_C2[缓存击穿:热点key过期,大量请求打数据库 方案:互斥锁、热点key永不过期、逻辑过期]
A5_B1 --> A5_B1_C3[缓存雪崩:大量key同时过期/Redis宕机 方案:过期时间加随机值、集群高可用、多级缓存、限流熔断]
A5_B2 --> A5_B2_C1[锁控制的方案对比]
A5_B2 --> A5_B2_C2[注意点:可重入、防死锁、锁超时、锁失效、防主从锁丢失]
A5_B2_C1 --> A5_B2_C1_D1[setnx+expire:存在死锁风险,命令非原子]
A5_B2_C1 --> A5_B2_C1_D2[set key value NX EX:原子命令,单机最优]
A5_B2_C1 --> A5_B2_C1_D3[Redlock:多节点锁,集群方案]
A5_B2_C1 --> A5_B2_C1_D4[Redission框架:自动续期,可重入,防死锁]
A6 --> A6_B1[为什么Redis单线程还很快]
A6 --> A6_B2[IO多路复用:epoll、select、poll区别]
A6 --> A6_B3[fork子进程:RDB/AOF重写的性能开销]
A6 --> A6_B4[网络IO瓶颈、大key问题:拆分大key、异步清理]
A6_B1 --> A6_B1_C1[纯内存操作、IO多路复用、高效数据结构、减少上下文切换]
A7 --> A7_B1[禁止使用keys*,改用scan游标遍历]
A7 --> A7_B2[禁止flushall/flushdb线上随意执行]
A7 --> A7_B3[大key定期巡检、内存监控、慢查询日志排查]
A7 --> A7_B4[禁止单机裸跑,生产必须:哨兵/集群架构]
浙公网安备 33010602011771号