第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 不同于C语言的字符串 23
2.1.2 SDS的奥秘 24
2.1.3 出招实战:分布式ID生成器 27
2.2 Lists实现原理与实战 28
2.2.1 线性有序 28
2.2.2 linkedlist、ziplist、quicklist、listpack演进 28
2.2.3 出招实战:消息队列 36
2.3 Sets实现原理与实战 40
2.3.1 无序和唯一 40
2.3.2 intset 41
2.3.3 出招实战:共同好友 43
2.4 散列表实现原理与实战 44
2.4.1 field-value pairs集合 44
2.4.2 dict和listpack 45
2.4.3 出招实战:购物车 49
2.5 Sorted Sets实现原理与实战 52
2.5.1 有序性和唯一性 52
2.5.2 skiplist dict和listpack 52
2.5.3 出招实战:游戏排行榜 57
2.6 Stream实现原理与实战 59
2.6.1 支持消费者组的轻量级MQ 59
2.6.2 Radix Tree的奥秘 60
2.6.3 出招实战:实现消费者组特性的消息队列 67
2.7 Geospatial实现原理与实战 76
2.7.1 基于位置服务 77
2.7.2 GeoHash编码和底层数据结构 81
2.7.3 出招实战:附近的人 86
2.8 Bitmap实现原理与实战 90
2.8.1 Bitmap 90
2.8.2 SDS数据结构构成的位数组 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 Bloom Filter 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