Redis源码剖析与实战,深入源码底层实现,轻松通关Redis面试

你将获得什么?

  • 从源码角度理解Redis系统设计思路
  • 经典C语言的开发技巧
  • 掌握计算机系统设计思想
  • Redis高频面试题目解析

课程简介

说实话,平常我们在基于Redis做应用开发的时候,可能只是把它作为一个缓存系统或是数据库来存取数据,并不会接触到源码层面的东西。

但实际上,我们在使用或运维Redis的时候,经常会面临Redis性能变差、Redis实例故障等会影响到业务应用运行的问题。再者,经历过大厂面试的人也知道,很多互联网公司在招聘资深技术岗时,都会问一些跟Redis相关的考点问题。

这些问题怎么解决、怎么回答,其实考验的就是我们对Redis底层源码的掌握程度。但是,阅读源码,你可能觉得想想都是一件很难的事情:我是想读Redis源码,但是总感觉无从下手,或者是无所适从,结果最后就不了了之了。

其实,你之所以“无从下手”的原因,是缺少了代码结构的全景图;而出现“无所适从”的问题,是缺少阅读目标的牵引和基本原理的支撑。简单来说,就是你没有掌握科学、高效的代码阅读方法。

所以在这门课程中,蒋德钧老师就会分享他实际阅读Redis源码总结出来的经验和方法,帮助你先从整体上掌握Redis源码的结构,也就是形成一幅Redis源码全景图。

Redis源码剖析与实战,深入源码底层实现,轻松通关Redis面试

然后,蒋老师会带你细分Redis的各大功能特性,梳理出Redis功能模块的主线逻辑,让你有目标、更高效地阅读和学习代码,进一步掌握Redis不同功能特性的设计与实现思路。并且在阅读代码的过程中,还会带你体会和掌握关键源码对应的计算机系统设计思想,从而你也可以把这些设计思想应用到自己的系统开发中。

课程模块设计

课程主体划分为以下6大模块。

  • 数据结构:你会学习到Redis主要数据结构的设计思想和实现,包括字符串的实现方法、内存紧凑型结构的设计、哈希表性能优化设计,以及ziplist、quicklist、listpack、跳表的设计与实现等。
  • 网络通信与执行模型:你会掌握Redis server的启动流程、高性能网络通信设计与实现、事件驱动框架的设计与实现、Redis线程类型的设计和优化等。
  • 缓存:你会了解常见的缓存替换算法是如何从原理转变为代码的,从而更深刻地理解Redis实现缓存算法的设计思路。
  • 可靠性保证:你会掌握RDB、AOF的具体实现,分布式系统中Raft一致性协议的设计实现,以及故障切换的关键代码实现等代码设计思路。
  • 切片集群:你会学习到Redis切片集群中关键机制的设计与实现,包括Gossip通信协议、请求重定向、数据迁移等,并帮你搞懂面试中关于构建提升Redis使用可扩展性的解题思路。
  • 编程技巧:你会学习和掌握Redis源码中使用的一些编程技巧,并可以应用到自己的程序开发中。

课程中如果没有特殊说明,老师介绍的源码都是基于 Redis 5.0.8 版本的。

课程目录

课前导读
开篇词|阅读Redis源码能给你带来什么?
01带你快速攻略Redis源码的整体架构
数据结构模块
02键值对中字符串的实现,用char*还是结构体?
03如何实现一个性能优异的Hash表?
04内存友好的数据结构该如何细化设计?
05有序集合为何能同时支持点查询和范围查询?
06从ziplist到quicklist,再到listpack的启发
07为什么Stream使用了RadixTree?
事件驱动框架和执行模型模块
08 Redis server启动后会做哪些操作?
09 Redis事件驱动框架(上):何时使用select、poll、 epoll?
10Redis事件驱动框架(中):Redis实现了Reactor模型吗?
11Redis事件驱动框架(下):Redis有哪些事件?
12Redis真的是单线程吗?
13 Redis6.0多I0线程的效率提高了吗?
14从代码看分布式锁的实现
缓存模块
15为什么LRU算法原理和代码实现不一样?
16LFU算法和其他算法相比有优势吗?
17 Lazy Free会影响缓存替换吗?
可靠性保证模块
18如何解读RDB的格式?
19AOF重写的影响有多大?
20主从复制始于何时,止于何处?
21哨兵也是Redis实例吗?
22从哨兵Leader选举学习Raft协议实现(上)
23从哨兵Leader选举学习Raft协议实现(下)
24Pub/Sub在主从故障切换时是如何发挥作用的?
Redis Cluster模块
25从Gossip协议学习消息传递的实现
26 MOVED、ASK命令是如何实现的?
27 Redis Cluster数据迁移会阻塞吗?
编程技巧模块
28如何高效使用循环buffer?
29如何在系统中实现低开销监控?
30从Module的实现学习动态扩展功能
31如何在一个系统中实现单元测试?
结束语|向Redis学习系统设计思想

Like (0)
Previous 2021年10月7日 下午2:05
Next 2021年10月7日 下午2:29

相关推荐

发表回复

Please Login to Comment