《深入理解Redis》以由浅入深、由原理到应用场景的方式介绍了Redis 这款NoSQL 数据库产品。书中不仅细致地讲解了Redis 中的数据结构及流行的使用模式,还针对Redis 键的设计和管理,以及内存管理提出了建设性的方案。同时,作者深入Redis 源码,将其内部构造通过源代码调试的方式进行呈现。本书适合有一定NoSQL 经验的开发者或者架构师阅读。读者可以从书中找到许多应用场景和解决方案,例如Docker 部署、Redis 消息队列、基于Redis 的ETL 应用和基于Redis 的机器学习等。
目录
- 1 为何选择Redis?1
- 合适之选?2
- 尝试使用Redis4
- 流行的使用模式9
- Redis不合心意?马上再试试!11
- 总结13
- 2 高级键管理与数据结构14
- Redis键14
- Redis键模式15
- 键分隔符和命名约定17
- 手动创建Redis模式19
- 解构Redis对象映射器22
- 键过期27
- 键的注意事项27
- 大O符号28
- 为自定义代码计算大O符号30
- 回顾Redis数据结构的时间复杂度32
- 字符串32
- 哈希33
- 列表34
- 集合35
- 有序集合36
- 高级有序集合操作39
- 位串和位操作39
- HyperLogLogs41
- 总结42
- 3 内存管理的建议与技巧44
- 配置Redis44
- 主从复制45
- 32位Redis45
- INFO memory详解47
- 键过期49
- LRU键清除策略54
- 创建内存高效的Redis数据结构62
- 小巧的哈希、列表、集合和有序集合62
- 把位、字节和Redis字符串用作随机访问数组68
- 优化哈希,高效存储69
- 硬件和网络延迟72
- 操作系统建议74
- 总结75
- 4 Redis编程第一部分:Redis核心、客户端和编程语言76
- Redis的内部结构76
- 理解redis.h和redis.c83
- Redis序列化协议93
- Redis RDB格式97
- 使用Redis和Python创建协程99
- 使用Node.js和Redis实现Todo列表应用103
- 复制与公共访问106
- 总结106
- 5 Redis编程第二部分:Lua脚本、管理与DevOps108
- 在Redis中使用Lua108
- 使用Redis的KEYS和ARGV117
- Redis中的高级Lua脚本121
- MARC21数据提取121
- 纸质文具在线商店123
- 让JSON-LD、Lua和Redis协同工作126
- Redis Lua调试器130
- Redis的编程与管理133
- 主从复制134
- 使用MULTI和EXEC实现事务136
- Redis在DevOps中扮演的角色139
- 总结140
- 6 可伸缩性:Redis集群和Sentinel142
- 数据分区的方法142
- 范围分区143
- 列表分区145
- 哈希分区148
- 复合分区149
- 键哈希标签150
- 使用Twemproxy实现Redis集群151
- 使用关联数据片段服务器测试Twemproxy152
- Redis集群的背景158
- Redis集群概览159
- 使用Redis集群160
- Redis集群实时重新配置及重新分片165
- 故障转移168
- 在Redis集群中替换或者升级节点170
- 使用Redis Sentinel进行监控171
- 为区域代码列表分区配置Redis Sentinel173
- 总结176
- 7 Redis与互补的NoSQL技术177
- NoSQL技术的繁荣177
- Redis作为MongoDB的分析补充181
- Redis作为ElasticSearch的预处理组件192
- 在BIBCAT中使用Redis和ElasticSearch193
- ElasticSearch、Logstash和Redis198
- Redis作为Fedora Commons的智能缓存补充199
- 总结205
- 8 Docker容器与云端部署206
- Linux容器206
- 与Redis相关的Docker基础211
- Docker镜像中的层219
- Docker文件系统后端220
- Docker和Redis的问题227
- 使用Docker Compose打包应用程序227
- Redis和AWS232
- 专门的云托管选项233
- Redis Labs234
- DigitalOcean Redis234
- 总结235
- 9 任务管理与消息队列236
- Redis的发布/订阅模式概述236
- 发布/订阅RESP回复237
- SUBSCRIBE和UNSUBSCRIBE RESP数组237
- PSUBSCRIBE和UNSUBSCRIBE数组239
- 使用redis-cli进行发布/订阅240
- Redis发布订阅实战242
- 第一个工作站采用Python进行发布订阅244
- 第二个工作站采用Node.js进行发布订阅246
- 第三个工作站使用Lua客户端进行发布订阅248
- Redis键空间通知251
- 使用Redis和Celery进行任务管理255
- GIS和RestMQ259
- 使用RestMQ进行任务管理262
- 使用Redis技术进行消息通信264
- 使用Disque进行消息通信264
- 总结266
- 10 信息流的测量与管理267
- 基于Redis的ETL方案267
- 将JSON转换成RESP273
- 管理Redis时的安全考虑279
- 使用Redis Web仪表板进行运营监测282
- 机器学习283
- 朴素贝叶斯与工作分类284
- 使用Redis实现线性规划294
- 总结299
- 来源300