本书共5章。其中,第1章从一条命令的执行开始,勾勒出Redis的数据存储原理和整体架构;第2章介绍了所有数据类型的实现原理和应用实战;第3章介绍了RDB快照、AOF、主从复制架构、哨兵集群和Redis Cluster的原理及使用方法;第4章介绍了Redis事务、内存管理、事件驱动、发布/订阅机制、客户端缓存和I/O多线程模型;第5章介绍了性能排查与解决问题的检查清单、使用规范、内存优化技巧、生产王者必备配置、缓存使用策略和分布式锁演进原理。
微信公众号“码哥字节”作者、InfoQ签约作者、后端架构师,9 年互联网金融后端从业经验。擅长Redis、Spring、Kafka、MySQL 等技术,对云原生微服务有着深入的研究,喜欢用简洁、风趣、幽默的语言,将各种技术的知识点或深或浅地展开,分享自己在成长过程中积累的经验和正确提升技术水平的方法论。
第1章 起势入门 1
1.1 从头说起 1
1.1.1 Redis能做什么 1
1.1.2 源码编译 2
1.1.3 目录结构 7
1.2 整体架构 8
1.2.1 数据存储原理 10
1.2.2 一条命令的执行过程 14
第2章 核心筑基——数据结构与心法 23
2.1 字符串 23
2.1.1 是什么 23
2.1.2 修炼心法 24
2.1.3 出招实战:分布式 ID 生成器 27
2.2 Lists 28
2.2.1 是什么 28
2.2.2 修炼心法 28
2.2.3 出招实战:消息队列 36
2.3 Sets 40
2.3.1 是什么 40
2.3.2 修炼心法 41
2.3.3 出招实战:共同好友 43
2.4 散列表 44
2.4.1 是什么 44
2.4.2 修炼心法 45
2.4.3 出招实战:购物车 49
2.5 Sorted Sets 52
2.5.1 是什么 52
2.5.2 修炼心法 52
2.5.3 出招实战:排行榜 57
2.6 Stream 59
2.6.1 是什么 59
2.6.2 修炼心法 60
2.6.3 出招实战:消息队列 67
2.7 Geospatial 76
2.7.1 是什么 77
2.7.2 修炼心法 81
2.7.3 出招实战:附近的人 86
2.8 Bitmap 90
2.8.1 是什么 90
2.8.2 修炼心法 91
2.8.3 出招实战:登录判断、签到统计系统 94
2.9 HyperLogLog 97
2.9.1 是什么 97
2.9.2 修炼心法 98
2.9.3 出招实战:网页访问量统计 99
2.10 Bloom Filter 101
2.10.1 是什么 102
2.10.2 修炼心法 102
2.10.3 出招实战:缓存穿透预防 103
2.11 Redis 高性能的原因 106
2.11.1 基于内存实现 107
2.11.2 I/O 多路复用模型 108
2.11.3 单线程模型 110
2.11.4 高效的数据结构 112
2.11.5 全局散列表 113
第3章 不死之身——高可用 114
3.1 宕机恢复,不丢数据稳如山 114
3.1.1 RDB 快照 114
3.1.2 AOF 118
3.2 主从复制架构 125
3.2.1 主从数据同步原理 127
3.2.2 主从同步的缺点 135
3.3 哨兵集群 136
3.3.1 哨兵的任务 138
3.3.2 哨兵集群原理 143
3.4 Redis 集群 147
3.4.1 Redis 集群是什么 148
3.4.2 Redis 集群的原理 150
3.4.3 集群配置注意事项 164
第4章 结丹飞升——高级技能进阶 165
4.1 Redis 事务修炼手册 165
4.1.1 什么是事务的 ACID 165
4.1.2 Redis 如何实现事务 166
4.1.3 Redis 事务满足 ACID 吗 168
4.2 Redis内存管理 174
4.2.1 淘汰策略概述 174
4.2.2 过期删除策略 183
4.3 Redis事件驱动:文件和时间的协奏曲 185
4.3.1 Redis server 启动入口 186
4.3.2 文件事件 190
4.3.3 时间事件 191
4.4 Redis 发布/订阅机制深度解析 194
4.4.1 发布/订阅机制简介 194
4.4.2 发布/订阅机制实战 195
4.4.3 原理分析 199
4.4.4 使用场景 204
4.5 性能必杀技之客户端缓存 205
4.5.1 为什么需要客户端缓存 205
4.5.2 客户端缓存实现原理 207
4.5.3 源码解析 211
4.6 性能必杀技之 Redis I/O多线程模型 213
4.6.1 单线程模型真的只有一个线程吗 213
4.6.2 线程模型的演化 214
4.6.3 I/O多线程模型解读 215
4.7 Redis 内存碎片深度解析与优化策略 221
4.7.1 数据已删,释放的内存去哪了 221
4.7.2 什么是内存碎片 223
4.7.3 内存碎片的形成原因 223
4.7.4 内存碎片解决之道 224
第5章 元婴大成——出师实战 227
5.1 Redis 性能排查与解决问题的终极检查清单 227
5.1.1 性能基线测量 227
5.1.2 慢命令监控 229
5.1.3 解决性能问题的终极检查清单 230
5.2 Redis 很强,不懂使用规范就糟蹋了 237
5.2.1 key-value使用规范 237
5.2.2 命令使用规范 239
5.2.3 数据存储使用规范 240
5.2.4 SDK使用规范 240
5.2.5 运维规范 241
5.3 Redis 内存优化必杀技,小内存存储大数据 241
5.3.1 key-value优化 242
5.3.2 小数据集合编码优化 243
5.3.3 使用对象共享池 244
5.3.4 使用bit或byte级别操作 244
5.3.5 巧用Hashes类型优化 245
5.3.6 使用内存碎片清理功能 246
5.3.7 使用32位的Redis 246
5.4 生产王者必备配置详解 246
5.4.1 常规配置 247
5.4.2 RDB 快照持久化 250
5.4.3 主从复制 251
5.4.4 安全 255
5.4.5 内存管理 256
5.4.6 惰性释放 257
5.4.7 AOF 持久化 259
5.4.8 Redis集群 261
5.4.9 性能监控 264
5.4.10 高级配置 264
5.4.11 在线内存碎片清理 270
5.4.12 绑定 CPU 271
5.4.13 sentinel.conf 哨兵 271
5.5 缓存击穿、缓存穿透、缓存雪崩怎么解决 275
5.5.1 缓存击穿 275
5.5.2 缓存穿透 277
5.5.3 缓存雪崩 278
5.6 Redis 缓存策略与数据库一致性问题深度剖析 280
5.6.1 缓存策略 281
5.6.2 缓存与数据库一致性是什么 287
5.6.3 旁路缓存的问题分析 287
5.6.4 数据库与缓存一致性解决方案 293
5.6.5 总结 295
5.7 Redis 分布式锁演进原理与实战 296
5.7.1 为什么需要分布式锁 296
5.7.2 入门级分布式锁 297
5.7.3 释放别人的锁 299
5.7.4 可重入锁 300
5.7.5 正确配置锁过期时间 303
5.7.6 Redis 部署方式对锁的影响 307
5.7.7 红锁 307
5.7.8 红锁的是与非 308