加餐(一)_ 经典的Redis学习资料有哪些?
你好,我是蒋德钧。
咱们课程的“基础篇”已经结束了。在这个模块,我们学习了 Redis 的系统架构、数据结构、线程模型、持久化、主从复制和切片集群这些核心知识点,相信你已经初步构建了自己的一套基础知识框架。
不过,如果想要持续提升自己的技术能力,还需要不断丰富自己的知识体系,那么,阅读就是一个很好的方式。所以,这节课,我就给你推荐几本优秀的书籍,以及一些拓展知识面的其他资料,希望能够帮助你全面掌握 Redis。
# 经典书籍
在学习 Redis 时,最常见的需求有三个方面。
日常使用操作:比如常见命令和配置,集群搭建等;
关键技术原理:比如我们介绍过的 IO 模型、AOF 和 RDB 机制等;
在实际使用时的经验教训,比如,Redis 响应变慢了怎么办?Redis 主从库数据不一致怎么办?等等。
接下来,我就根据这些需求,把参考资料分成工具类、原理类、实战类三种。我们先来看工具类参考资料。
# 工具书:《Redis使用手册》
一本好的工具书,可以帮助我们快速地了解或查询 Redis 的日常使用命令和操作方法。我要推荐的《Redis 使用手册》,就是一本非常好用的工具书。
在这本书中,作者把 Redis 的内容分成了三大部分,分别是“数据结构与应用”“附加功能”和“多机功能”。其中,我认为最有用的就是“数据结构与应用”的内容,因为它提供了丰富的操作命令介绍,不仅涵盖了 Redis 的 5 大基本数据类型的主要操作命令,还介绍了 4 种扩展数据类型的命令操作,包括位图、地址坐标、HyperLogLog 和流。只要这本书在手边,我们就能很轻松地了解和正确使用 Redis 的大部分操作命令了。
不过,如果你想要了解最全、最新的 Redis 命令操作,我建议你把 Redis 的命令参考网站收录到你的浏览器书签中,随用随查。目前,Redis 官方提供的所有命令操作参考肯定是最全、最新的,建议你优先使用这个官方网站。在这个网页上查找命令操作非常方便,我们既可以通过命令操作的名称直接查找,也可以根据 Redis 的功能,分类查找对应功能下的操作,例如和集群相关的操作,和发布订阅相关的操作。考虑到有些同学可能想看中文版,我再给你提供一个翻译版的命令参考。
除了提供 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 上的源码库。另外,有一个网站提供了 Redis 3.0 源码的部分中文注释,你也可以参考一下。
另外,我们还需要亲自动手实践。在课程的留言中,我看到有同学说“没有服务器无法实践”,其实,Redis 运行后本身就是一个进程,我们是可以直接使用自己的电脑进行部署的。只要不是性能测试,在功能测试或者场景模拟上,自己电脑的环境一般都是可以胜任的。比如说,要想部署主从集群或者切片集群,模拟主库故障,我们完全可以在自己电脑上起多个 Redis 实例来完成,只要保证它们的端口号不同,就可以了。
好了,关于 Redis 本身的书籍的推荐,就先告一段落了,接下来,我想再给你分享一些扩展内容。
# 扩展阅读方向
通过前面几节课的学习,我相信你一定已经发现了,Redis 的很多关键功能,其实和操作系统底层的实现机制是相关的,比如说,非阻塞的网络框架、RDB 生成和 AOF 重写时涉及到的 fork 和写时复制机制,等等。另外,Redis 主从集群中的哨兵机制,以及切片集群的数据分布还涉及到一些分布式系统的内容。
我用一张图片,展示一下 Redis 的关键机制和操作系统、分布式系统的对应知识点。
AOF 日志的刷盘时机和操作系统的 fsync 机制、高速页缓存的刷回有关,而网络框架跟 epoll 有关,RDB 生成和 AOF 重写与 fork、写时复制有关(我在前面第 3、4、5 讲上讲过它们的关联)。
此外,我在第 8 讲介绍的哨兵选主过程,其实是分布式系统中的经典的 Raft 协议的执行过程,如果你比较了解 Raft 协议,就能很轻松地掌握哨兵选主的运行机制了。在第 9 讲,我们学习了实现切片集群的 Redis Cluster 方案,其实,业界还有一种实现方案,就是 ShardedJedis,而它就用到了分布式系统中经典的一致性哈希机制。
所以,如果说你希望自己的实战能力能够更强,我建议你读一读操作系统和分布式系统方面的经典教材,比如《操作系统导论》。尤其是这本书里对进程、线程的定义,对进程 API、线程 API 以及对文件系统 fsync 操作、缓存和缓冲的介绍,都是和 Redis 直接相关的;再比如,《大规模分布式存储系统:原理解析与架构实战》中的分布式系统章节,可以让你掌握 Redis 主从集群、切片集群涉及到的设计规范。了解下操作系统和分布式系统的基础知识,既能帮你厘清容易混淆的概念(例如 Redis 主线程、子进程),也可以帮助你将一些通用的设计方法(例如一致性哈希)应用到日常的实践中,做到融会贯通,举一反三。
# 小结
这节课,我给你推荐了三本参考书,分别对应了 Redis 的命令操作使用、关键机制的实现原理,以及实战经验,还介绍了 Redis 操作命令快速查询的两个网站,这可是我们日常使用 Redis 的必备工具,可以提升你使用操作 Redis 的效率。另外,对于 Redis 关键机制涉及到的扩展知识点,我从操作系统和分布式系统两个方面进行了补充。
Redis 的源码阅读是成为 Redis 专家的必经之路,你可以阅读一下 Redis 在 GitHub 上的源码库,如果觉得有难度,也可以从带有中文注释的源码阅读网站入手。
最后,我也想请你聊一聊,你的 Redis 学习资料都有哪些呢?欢迎在留言区分享一下,我们一起进步。另外,如果你觉得今天的内容对你有所帮助,也欢迎你分享给你的朋友或同事。
# 精选评论
点击查看
老师推荐的书籍都非常经典,这几本是学习Redis的必读书籍。
如果你觉得这些书读起来困难,我推荐一本之前同事写的《Redis 深度历险:核心原理与应用实践》,这本书很薄,而且最大的特点是讲解接地气,它可以让你对Redis的基础使用、业务场景、原理分析有一个基本的认识和了解,作为入门和进阶非常合适,起码可以让你重新树立起深入学习Redis的信心。
另外,真心建议大家试着去读一下Redis源码,没有想象的那么难,而且Redis的代码质量非常高,由于是单线程的内存数据库,没有多线程运行时的复杂逻辑,读起来非常顺畅!其实很多我们纠结的小问题,不要只靠猜和网上查资料,读一下源码就能快速找到答案。而且现在源码分析的文章非常多,讲解的也很细,结合起来读代码并不难。
只有自己试着去读源码,当遇到问题时,再查资料,学习到的东西才是最深刻的。而且在查资料时,还会发现更大的世界,例如老师文章提到的操作系统知识、分布式系统问题、架构设计的取舍等等,这样我们所学到的知识不再是一个面,而是慢慢形成一个知识网,这样才能够达到融会贯通,举一反三。
2
3
4
5
6
7
8
9
三本书读了两,源码也过了一遍,操作系统导论也看过,推荐《redis5设计与源码分析》讲源码的,很不错。
之前就觉得哨兵选主机制像raft
之前组长走的时候留了一本《Redis开发和运维》给我,面试问到redis伸缩容的时候去看了下。后面面试又被问到Redis的数据结构.bitmap,自己就去网上买了《Redis设计与实现》 ,目前也在看。看了老师的建议去阅读源码,没有学过C,阅读起来会有难度吗?上面是自己的学习资料
推荐两本书:一本老师已经提到过了:redis设计与实现,另外一本redis深度历险。
建议阅读Redis源码,从基础数据结构看,再到db,再到网络部分,整体内容都很清晰明了。
2
3
推荐一本书《数据密集型应用系统设计》,一个专栏《分布式数据库30讲》,可以从更高视角看待 redis 的设计
巧了 都下载了
没看过一本的举个爪。
以前只是在某网站下载了一套redis视频,学习了几遍,敲了些命令。
2
redis单机,aof中有散列表写入记录没有删除记录,但是散列表丢失,访问key不存在。请问有什么排查思路?
视频资料话可以去B站搜搜看,适合入门