You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
9.5 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 加餐(一)| 经典的Redis学习资料有哪些
你好,我是蒋德钧。
咱们课程的“基础篇”已经结束了。在这个模块我们学习了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的关键机制和操作系统、分布式系统的对应知识点。
![](https://static001.geekbang.org/resource/image/a0/2c/a0f558fbf9105817744ee2c44230c62c.jpg)
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学习资料都有哪些呢欢迎在留言区分享一下我们一起进步。另外如果你觉得今天的内容对你有所帮助也欢迎你分享给你的朋友或同事。