




资源介绍
视频数量:28个
总时长:9小时6分
课程介绍:
Redis内核深度解析:从零开始用Go重建一个迷你Redis
你有没有过这样的经历:项目里用了Redis好几年,顺手SET、GET、EXPIRE,缓存、排行榜、分布式锁一把梭,但有人问起"Redis为什么这么快"或者"它底层到底是什么数据结构"的时候,却发现自己答不上来。
这不奇怪。市面上关于Redis的教程,要么停留在"怎么用命令"的层面,要么是一堆零散的源码分析贴,看得人云里雾里。Arpit Bhayani这门课走的是完全不同的路线——他不只讲原理,还带着你一行一行地用Go语言把Redis重新实现一遍。28个视频、9个多小时,做完这门课,你的代码仓库里会多出一个能跟Redis通信的即插即用服务,对照起来看源码会顺很多。
一、从网络层开始:搞懂Redis和客户端怎么说话
很多人以为Redis的快全靠内存,其实网络层的设计才是它的看家本领。课程的前几讲从最基础的TCP回声服务器写起,接着手把手教你实现Redis专用的通信协议RESP,搞清楚PING命令是怎么走完一整套客户端到服务端再到客户端的流程。然后是重头戏——IO多路复用和事件循环,Redis单线程却能扛住数万并发连接的秘密全在这里。之后再延伸到多客户端并发处理,把GET、SET、TTL这些最常用的命令逐个实现出来。学完这部分,你会对"Redis的I/O模型"这件事有彻底的理解,而不是背几个epoll的面试答案。
二、过期、淘汰与持久化:Redis怎么管内存和磁盘
数据放进Redis之后会发生什么?课程会带你实现DEL、EXPIRE以及自动过期机制,弄清楚Redis怎么在后台悄悄清理过期键——很多人以为EXPIRE靠定时器,其实Redis用的是惰性删除加定期采样结合的策略。内存是有限的,当Redis用满了配置上限该删谁留谁?这就引出了驱逐策略。从simple-first这种最简单的淘汰算法开始,再到经典的近似LRU算法,课程会用代码让你看到Redis是怎么用极小的代价实现高效内存淘汰的。还有INFO命令的实现、内存上限控制、用自定义malloc替换提升性能——这些生产环境里的调优技巧,源码里都有答案。
持久化方面,课程用AOF(Append Only File)带你把每次写操作都落到磁盘,理解Redis是怎么做故障恢复和日志重放的。同时还会实现优雅关闭(Graceful Shutdown)和事务(Transactions),前者保证退出时不丢数据,后者展示MULTI/EXEC背后的队列和串行化执行机制,这些都是在生产环境里必须考虑的功能。命令流水线(Pipelining)也会单独讲一讲,这是提升Redis吞吐的关键技巧。
三、内部数据结构:那些藏在命令背后的精妙设计
Redis的字符串、列表、集合听起来简单,但内部实现大有乾坤。课程会拆开字符串的SDS(Simple Dynamic String)实现,讲它为什么比C原生的字符串更安全、更高效,还省内存。列表的ziplist和quicklist、集合的intset——这些针对不同场景精心选择的数据结构,是Redis"小而美"的精髓所在。INCR命令背后对应的对象和编码机制也会一并讲清楚,搞明白为什么Redis里同一个key可以对应不同底层结构。
四、进阶专题:Geo、Hyperloglog和LFU
最后几讲是几个很有意思的算法专题。地理空间查询和GeoHash算法,让你理解Redis的GEOADD、GEORADIUS命令是怎么把地球上的经纬度转化成可比较的二进制编码;Hyperloglog基数估计,教你用极少的内存统计巨大数据集里的独立元素数量,这在统计UV场景里特别有用;LFU和近似计数,讲的是淘汰策略的另一种思路——不是淘汰最久没用的,而是淘汰访问频率最低的。
这门课适合谁?如果你用过Redis但一直被面试官问到原理就语塞;如果你想读Redis源码但不知道从何下手;如果你对网络编程、内存管理、数据结构这些底层话题有真正的兴趣——这门课会让你收获巨大。学完以后,你不再是一个只会调API的使用者,而是一个真正理解Redis内核机制的人。下次面对性能瓶颈或者诡异Bug的时候,你会有底气说:我知道它内部是怎么跑的。