<audio id="audio" title="加餐（一）| 经典的Redis学习资料有哪些？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/58/a0/588ef87ce0f83d7da8e48d2da3715fa0.mp3"></audio>

你好，我是蒋德钧。

咱们课程的“基础篇”已经结束了。在这个模块，我们学习了Redis的系统架构、数据结构、线程模型、持久化、主从复制和切片集群这些核心知识点，相信你已经初步构建了自己的一套基础知识框架。

不过，如果想要持续提升自己的技术能力，还需要不断丰富自己的知识体系，那么，阅读就是一个很好的方式。所以，这节课，我就给你推荐几本优秀的书籍，以及一些拓展知识面的其他资料，希望能够帮助你全面掌握Redis。

## 经典书籍

在学习Redis时，最常见的需求有三个方面。

- 日常使用操作：比如常见命令和配置，集群搭建等；
- 关键技术原理：比如我们介绍过的IO模型、AOF和RDB机制等；
- 在实际使用时的经验教训，比如，Redis响应变慢了怎么办？Redis主从库数据不一致怎么办？等等。

接下来，我就根据这些需求，把参考资料分成工具类、原理类、实战类三种。我们先来看工具类参考资料。

### 工具书：《Redis使用手册》

一本好的工具书，可以帮助我们快速地了解或查询Redis的日常使用命令和操作方法。我要推荐的《Redis使用手册》，就是一本非常好用的工具书。

在这本书中，作者把Redis的内容分成了三大部分，分别是“数据结构与应用”“附加功能”和“多机功能”。其中，我认为最有用的就是“数据结构与应用”的内容，因为它提供了丰富的操作命令介绍，不仅涵盖了Redis的5大基本数据类型的主要操作命令，还介绍了4种扩展数据类型的命令操作，包括位图、地址坐标、HyperLogLog和流。只要这本书在手边，我们就能很轻松地了解和正确使用Redis的大部分操作命令了。

不过，如果你想要了解最全、最新的Redis命令操作，我建议你把Redis的命令参考网站收录到你的浏览器书签中，随用随查。目前，Redis官方提供的所有命令操作参考肯定是最全、最新的，建议你优先使用这个[官方网站](https://redis.io/commands/)。在这个网页上查找命令操作非常方便，我们既可以通过命令操作的名称直接查找，也可以根据Redis的功能，分类查找对应功能下的操作，例如和集群相关的操作，和发布订阅相关的操作。考虑到有些同学可能想看中文版，我再给你提供一个[翻译版的命令参考](http://redisdoc.com/)。

除了提供Redis的命令操作介绍外，《Redis使用手册》还提供了“附加功能”部分，介绍了Redis数据库的管理操作和过期key的操作，这对我们进行Redis数据库运维（例如迁移数据、清空数据库、淘汰数据等）提供了操作上的指导。

有了工具手册，我们就能很轻松地掌握不同命令操作的输入参数、返回结果和复杂度了。接下来，就是进一步了解各种机制背后的原理了，我再跟你分享一本原理书。

### 原理书：《Redis设计与实现》

虽然《Redis设计与实现》和《Redis使用手册》是同一个作者写的，但是它们的侧重点不一样，这本书更加关注Redis关键机制的实现原理。

介绍Redis原理的资料有很多，但我认为，这本书讲解得非常透彻，尤其是在Redis底层数据结构、RDB和AOF持久化机制，以及哨兵机制和切片集群的介绍上，非常容易理解，我建议你重点学习下这些部分的内容。

除了文字讲解，这本书还针对一些难点问题，例如数据结构的组成、哨兵实例间的交互过程、切片集群实例的交互过程等，都使用了非常清晰的插图来表示，可以最大程度地降低学习难度。

其实，这本书也是我自己读的第一本Redis参考书，可以说，是它把我领进了Redis原理的大门。当时在学习时，正是因为有了这些插图的帮助，我才能快速地搞懂核心原理。直到今天，我都还记得这本书中的一些插图，真是受益匪浅。

虽然这本书的出版日期比较早（它针对的是Redis 3.0），但是里面讲的很多原理现在依然是适用的，它可以帮助你在从入门Redis到精通的道路上，迈进一大步。

### 实战书：《Redis开发与运维》

在实战方面，《Redis开发与运维》是一本不错的参考书。

首先，它介绍了Redis的Java和Python客户端，以及Redis用于缓存设计的关键技术和注意事项，这些内容在其他参考书中不太常见，你可以重点学习下。

其次，它围绕客户端、持久化、主从复制、哨兵、切片集群等几个方面，着重介绍了在日常的开发运维过程中遇到的问题和“坑”，都是经验之谈，可以帮助你提前做规避。

另外，这本书还针对Redis阻塞、优化内存使用、处理bigkey这几个经典问题，提供了解决方案，非常值得一读。在阅读的时候，你可以把目录里的问题整理一下，做成列表，这样，在遇到问题的时候，就可以对照着这个列表，快速地找出原因，并且利用书中的方案去解决问题了。

当然，要想真正提升实战能力，光读书是远远不够的，毕竟，“纸上得来终觉浅”。所以，我还想再给你分享两条建议。

第一个建议是阅读源码。读源码其实也是一种实战锻炼，可以帮助你从代码逻辑中彻底理解Redis系统的实际运行机制，**当遇到问题时，可以直接从代码层面进行定位、分析和解决问题**。阅读Redis源码，最直接的材料就是Redis在GitHub上的[源码库](https://github.com/redis/redis)。另外，有一个[网站](https://github.com/huangz1990/redis-3.0-annotated)提供了Redis 3.0源码的部分中文注释，你也可以参考一下。

另外，我们还需要亲自动手实践。在课程的留言中，我看到有同学说“没有服务器无法实践”，其实，Redis运行后本身就是一个进程，我们是可以直接使用自己的电脑进行部署的。只要不是性能测试，在功能测试或者场景模拟上，自己电脑的环境一般都是可以胜任的。比如说，要想部署主从集群或者切片集群，模拟主库故障，我们完全可以在自己电脑上起多个Redis实例来完成，只要保证它们的端口号不同，就可以了。

好了，关于Redis本身的书籍的推荐，就先告一段落了，接下来，我想再给你分享一些扩展内容。

## 扩展阅读方向

通过前面几节课的学习，我相信你一定已经发现了，Redis的很多关键功能，其实和操作系统底层的实现机制是相关的，比如说，非阻塞的网络框架、RDB生成和AOF重写时涉及到的fork和写时复制机制，等等。另外，Redis主从集群中的哨兵机制，以及切片集群的数据分布还涉及到一些分布式系统的内容。

我用一张图片，展示一下Redis的关键机制和操作系统、分布式系统的对应知识点。

<img src="https://static001.geekbang.org/resource/image/a0/2c/a0f558fbf9105817744ee2c44230c62c.jpg" alt="">

AOF日志的刷盘时机和操作系统的fsync机制、高速页缓存的刷回有关，而网络框架跟epoll有关，RDB生成和AOF重写与fork、写时复制有关（我在前面第3、4、5讲上讲过它们的关联）。

此外，我在[第8讲](https://time.geekbang.org/column/article/275337)介绍的哨兵选主过程，其实是分布式系统中的经典的Raft协议的执行过程，如果你比较了解Raft协议，就能很轻松地掌握哨兵选主的运行机制了。在[第9讲](https://time.geekbang.org/column/article/276545)，我们学习了实现切片集群的Redis Cluster方案，其实，业界还有一种实现方案，就是ShardedJedis，而它就用到了分布式系统中经典的一致性哈希机制。

所以，如果说你希望自己的实战能力能够更强，我建议你**读一读操作系统和分布式系统方面的经典教材，**比如《操作系统导论》。尤其是这本书里对进程、线程的定义，对进程API、线程API以及对文件系统fsync操作、缓存和缓冲的介绍，都是和Redis直接相关的；再比如，《大规模分布式存储系统：原理解析与架构实战》中的分布式系统章节，可以让你掌握Redis主从集群、切片集群涉及到的设计规范。了解下操作系统和分布式系统的基础知识，既能帮你厘清容易混淆的概念（例如Redis主线程、子进程），也可以帮助你将一些通用的设计方法（例如一致性哈希）应用到日常的实践中，做到融会贯通，举一反三。

## 小结

这节课，我给你推荐了三本参考书，分别对应了Redis的命令操作使用、关键机制的实现原理，以及实战经验，还介绍了Redis操作命令快速查询的两个网站，这可是我们日常使用Redis的必备工具，可以提升你使用操作Redis的效率。另外，对于Redis关键机制涉及到的扩展知识点，我从操作系统和分布式系统两个方面进行了补充。

Redis的源码阅读是成为Redis专家的必经之路，你可以阅读一下Redis在GitHub上的源码库，如果觉得有难度，也可以从带有中文注释的源码阅读网站入手。

最后，我也想请你聊一聊，你的Redis学习资料都有哪些呢？欢迎在留言区分享一下，我们一起进步。另外，如果你觉得今天的内容对你有所帮助，也欢迎你分享给你的朋友或同事。
