Redis 知识体系

📅 发布时间:2026/8/27 12:34:19
Redis 知识体系
文章目录一、 数据结构与底层原理 (Data Structures Internals)1. 五大核心数据类型及应用场景2. 高级数据类型3. 底层编码与数据结构 (Underlying Encodings)二、 核心机制与运行时原理 (Core Mechanisms)1. 线程模型与 I/O 模型2. 持久化机制 (Persistence)3. 内存管理与回收 (Memory Management)4. 事务与脚本三、 高可用与分布式架构 (High Availability Architecture)1. 主从复制 (Master-Slave Replication)2. 哨兵机制 (Sentinel)3. Redis Cluster (分布式集群)四、 生产环境常见问题与高阶应用 (Issues Advanced Applications)1. 经典缓存异常与解决方案2. Redis 与 MySQL 数据一致性方案 (Cache Consistency)3. 分布式锁 (Distributed Lock)4. 性能与运维调优导读构建一个完整的Redis 知识体系[如何理解]可以从底层数据结构、核心原理、高可用架构、生产环境常见问题及高级应用五个维度来进行系统化拆解。以下是 Redis 的全景知识图谱一、 数据结构与底层原理 (Data Structures Internals)1. 五大核心数据类型及应用场景String字符串: 缓存、计数器、分布式锁、分布式 Session。Hash哈希: 用户信息、购物车、对象属性存储。List列表: 消息队列LPUSH/RPOP、最新动态/文章列表。Set集合: 标签、共同好友、抽奖去重、点赞。ZSet有序集合: 排行榜、带权重的延时队列。2. 高级数据类型Bitmap: 用户签到、活跃用户统计基于位操作极省内存。HyperLogLog: 海量数据基数统计如 UV 统计误差率约 0.81%。GeospatialGEO: 附近的人、LBS 地理位置查询。Stream: Redis 5.0 推出的功能完备的持久化消息队列支持消费者组。Bloom Filter布隆过滤器通过插件或 RedisBloom 实现: 海量数据去重、防止缓存穿透。3. 底层编码与数据结构 (Underlying Encodings)SDS (Simple Dynamic String): 二进制安全、O(1) 获取长度、空间预分配与惰性释放。Intset: 整数集合适用于存整数的紧凑数组。Dict (字典/哈希表): 渐进式 Rehash避免单线程阻塞解决 Hash 冲突链地址法。ZipList (压缩列表): 内存紧凑型结构适用于小数据量减少内存碎片。QuickList: LinkedPList ZipList 的结合Redis 列表的底层实现。SkipList (跳表): ZSet 的底层实现之一结合字典支持对数时间复杂度的查找、插入与范围查询。Listpack: Redis 5/7 开始逐步替代 ZipList 的更优内存紧凑结构。二、 核心机制与运行时原理 (Core Mechanisms)1. 线程模型与 I/O 模型线程模型与 I/O 模型详情单线程事件循环: Redis 核心网络和键值对读写采用单线程基于 Reactor 模式的 I/O 多路复用如epoll/select。Redis 6.0 多线程 I/O: 引入多线程处理网络读写io-threads但命令执行依然由单线程串行处理避免了多线程并发带来的锁竞争和上下文切换。2. 持久化机制 (Persistence)持久化机制详情RDB (Redis Database Snapshot):原理SAVE同步阻塞与BGSAVEfork子进程利用写时复制 Copy-on-Write。优缺点恢复快、文件体积小但可能丢失最后一次快照的数据。AOF (Append Only File):原理记录每一次写命令支持always、everysec、no三种刷盘策略。重写RewriteBGREWRITEAOF压缩 AOF 文件体积。混合持久化 (Hybrid PersistenceRedis 4.0): RDB 镜像 AOF 增量日志兼顾启动速度与数据安全性。3. 内存管理与回收 (Memory Management)内存管理与回收详情键过期策略:惰性删除 (Lazy Deletion)访问时才检查并删除。定期删除 (Periodic Deletion)定时随机抽取一部分设置了过期的 Key 进行检查删除。内存淘汰策略 (Eviction Policies - maxmemory-policy):不淘汰noeviction默认写报错。LRU 策略volatile-lru、allkeys-lru最近最少使用。LFU 策略volatile-lfu、allkeys-lfu最不经常使用Redis 4.0。Random 策略volatile-random、allkeys-random。TTL 策略volatile-ttl优先淘汰剩余存活时间最短的。4. 事务与脚本事务与脚本详情Redis 事务:MULTI、EXEC、DISCARD、WATCH。注意不支持原子回滚某条命令失败其余命令继续执行。Lua 脚本: 通过EVAL保证多条命令执行的原子性常用于分布式锁和复杂逻辑。三、 高可用与分布式架构 (High Availability Architecture)1. 主从复制 (Master-Slave Replication)主从复制详情全量复制 (Full Sync): RDB 传输 复制积压缓冲区Replication Buffer。部分复制 (Partial Sync): 结合repl_backlog_buffer和offset网络闪断后增量同步。心跳检测:REPLCONF ACK维持长连接检测主从健康状态。2. 哨兵机制 (Sentinel)哨兵机制详情核心功能: 监控Monitoring、自动故障转移Automatic Failover、配置中心通知。选举原理: 基于 Raft 协议的思想进行 Leader 选举由 Sentinel 节点决策推举新的主节点。3. Redis Cluster (分布式集群)Redis Cluster详情数据分片: 采用Hash Slot哈希槽机制整个集群共16384个槽每个节点负责一部分槽。寻址与重定向: 客户端直连任意节点遇到不在当前节点的槽时服务器返回MOVED或ASK重定向指令。高可用与选举: 每个 Master 可配多个 SlaveMaster 宕机后由集群内其他 Master 投票选举出新 MasterGossip 协议传递状态。四、 生产环境常见问题与高阶应用 (Issues Advanced Applications)1. 经典缓存异常与解决方案经典缓存异常详情缓存穿透 (Cache Penetration): 查询一个数据库和缓存中都不存在的数据。解法: 布隆过滤器拦截、缓存空对象/默认值。缓存击穿 (Cache Breakdown): 某个热点 Key 在过期瞬间大量并发请求直接打到 DB。解法: 互斥锁Mutex Key、热点数据永不过期。缓存雪崩 (Cache Avalanche): 大量热点 Key 在同一时间段集中失效。解法: 过期时间加随机散列、多级缓存架构、降级限流。2. Redis 与 MySQL 数据一致性方案 (Cache Consistency)常见方案与演进:旁路缓存模式 (Cache Aside Pattern): 先删缓存再更新数据库或先更库再删缓存。延时双删: 处理“先删缓存再更新数据库”后由于主从同步延迟导致的脏数据。基于 Binlog 的异步同步 (订阅方案): 使用Canal监听 MySQL Binlog异步更新 Redis实现最终一致性解决代码侵入性。一致性策略深度解析:强一致性: 读写锁或分布式事务但性能损耗极大。最终一致性: 延迟删除、消息队列重试、Canal 订阅。核心注意事项: 无论哪种方案“删缓存”比“更新缓存”更安全避免高并发下多线程修改导致的数据覆盖问题。3. 分布式锁 (Distributed Lock)分布式锁详情实现要点: 互斥性、防死锁过期时间、防误删UUID/Token 校验、原子性Lua 脚本。高阶实现:Redisson框架提供看门狗机制 Watchdog 自动续期支持 Redlock 算法。4. 性能与运维调优性能与运维调优详情大 Key (Big Key) 与热 Key (Hot Key) 问题:识别redis-cli --bigkeys、MEMORY USAGE、监控命令耗时。处理大 Key 拆分、异步删除UNLINK命令、热 Key 本地缓存Guava/Caffeine。慢查询日志 (Slowlog): 配置slowlog-log-slower-than和slowlog-max-len排查耗时命令。内存碎片率优化:mem_fragmentation_ratio监控通过activedefrag yes开启内存碎片自动整理依赖 jemalloc。