InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

Redis 开源文档《Redis 设计与实现》发布

  • 2013-03-13
  • 本文字数:1223 字

    阅读完需:约 4 分钟

Redis 是运用比较广泛的 NoSQL 产品之一,目前的稳定版本是 2.6.10,包括 Github Instagram 、Blizzard、新浪微博等都在产品中大量使用了Redis。其代码基于BSD 协议开源,整个项目代码量只有2 万多行(2.2 版本),大家可以通过阅读代码在相对短的时间内学习到作者的设计理念和Redis 的实现方式,做到知其然知其所以然。

日前黄健宏( huangz )发布了开源文档《Redis 设计与实现》,这是一份从阅读源代码入手来学习 Redis 的笔记合集,对于写这份文档的目的,作者如是说:

本书的目标是以简明易懂的方式讲解 Redis 的内部运行机制, 通过阅读本书, 你可以了解到 Redis 从数据结构到服务器构造在内的几乎所有知识。

《Redis 设计与实现》主要从高抽象层次在如下的 5 个方面对 Redis 的实现进行阐述:

  1. 内部数据结构
  2. 内存映射数据结构
  3. Redis 数据类型
  4. 功能的实现
  5. 部分运作机制

同时作者为了满足大家深入学习的需求,还对 Redis 2.6 的源代码进行了详细注释

《Redis 设计与实现》的作者黄健宏(huangz)是一位 90 后,喜欢函数式编程,由于对数据库产生了兴趣才开始阅读 Redis 源代码,他这样看待整个阅读过程:

阅读 Redis 源码对我来说是一次全新的学习体验。当我刚开始看 Redis 源码的时候,我只会一些基本的数据结构和算法,没有任何网络编程、数据库或者系统编程方面的经验,基本是一边看源码,一边补充基础知识,然后才慢慢理解的。

在问到阅读开源项目源代码时应该参照怎样的路线,他分享了自己的一些方法:

  1. 自底向上:从耦合关系最小的模块开始读,然后逐渐过度到关系紧密的模块。就好像写程序的测试一样,先从单元测试开始,然后才到功能测试。我在刚开始读 Redis 源码的时候,使用的就是这种方法:先从单独的数据结构模块开始,然后再过渡到高层的功能模块。
  2. 从功能入手:通过文件名(模块名)和函数名,快速定位到一个功能的具体实现,然后追踪整个实现的运作流程,从而了解该功能的实现方式。我在读阻塞列表、数据库这种流程和功能都比较复杂,和其他文件耦合也比较多的模块时,使用的就是这样的方法。
  3. 自顶向下:从程序的 main() 函数,或者某个特别大的调用者函数为入口,以深度优先或者广度优先的方式阅读它的源码。我在阅读 redis.c/serverCron() 、 redis.c/main() 和 ae.c/aeMain() 这种有明显调用者性质的函数时,使用的就是这样的方法。

然后他强调:

这三种方法并不互相冲突:在某些函数 / 模块要用某种方法,而某些函数 / 模块要使用另一种方法,有时候又需要混合使用多种方法。

值得一提的是本书已经以“保留所有权利”的方式开源,大家可以在 github 上查看内容的创作过程,同时这种开源的协作方式能让更多人参与内容优化中来。

目前在 Github 上也有很多类似的内容,如: Developing Backbone.js Applications ProGit 等,也许这种写作方式将会在技术领域引领一个新的内容创作潮流。

亲爱的 InfoQ 读者,如果你也在阅读开源项目的源代码,并且有一些阅读心得希望和大家分享,欢迎和 InfoQ 的编辑们联系:editors@cn.infoq.com。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2013-03-13 03:2217800
用户头像

发布了 89 篇内容, 共 30.3 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

为什么11·11物流一年比一年快?奥秘就在这里!

华为云开发者联盟

物联网 物流 仓储

阿里P8Java大神给迷茫的程序员一些中肯建议:“请不要再虚度光阴了!”

Java架构之路

Java 阿里巴巴 程序员 架构 编程语言

架构师训练营第 1 期第 7 周作业

业哥

sharding-jdbc 分库分表的 4种分片策略,还蛮简单的

程序员小富

Java 分库分表

华为云“创原会”:40+技术精英论道云原生2.0

华为云开发者联盟

k8s 华为云

【原创】SpringBoot快速整合Thymeleaf模板引擎

田维常

spring Boot Starter

华为云FusionInsight湖仓一体解决方案的前世今生

华为云开发者联盟

数据库 华为 仓库

Spring Boot 如何快速实现定时任务

田维常

spring Boot Starter

【原创】Spring Boot 集成Spring Data JPA的玩法

田维常

spring Boot Starter

只需三步,带你从0到1玩转React,附源码我一定给你讲明白

小Q

Java 学习 编程 架构 面试

详解软件行业低代码开发平台以及敏捷开发方案

Marilyn

敏捷开发

【原创】Spring Boot集成Redis的玩法

田维常

spring Boot Starter

【原创】Spring Boot 过滤器、监听器、拦截器的使用

田维常

spring Boot Starter

国家超算深圳中心计划2年内提升计算能力至少1000倍;图神经网络的生成式预训练论文解读

京东科技开发者

云计算

如何快速构建Spring Boot基础项目?

田维常

spring Boot Starter

产品经理团队的管理秘法

马踏飞机747

管理 产品经理 团队

华为20级工程师吐血整理出600页Spring微服务架构设计,绝了!

996小迁

Java spring 编程 架构 微服务

MySQL-技术专题-STRAIGHT_JOIN

洛神灬殇

用时半个月,终于把2020年各大公司的Java面试题精选整理成文档了

Java架构之路

Java 架构 面试 编程语言

WebSocket连接错误Error during WebSocket handshake Unexpected response code 404

洛神灬殇

浅析一个较完整的SpringBoot项目

田维常

spring Boot Starter

物联网时代存储告急 边缘存储如何缓解存储压力?

京东科技开发者

云计算 云服务 云存储

区块链数字货币商城系统开发技术

薇電13242772558

区块链 数字货币

【原创】Spring Boot集成Mybatis的玩法

田维常

spring Boot Starter

Spring Boot 集成 Druid 监控数据源

田维常

spring Boot Starter

【原创】SpringBoot 这几种配置文件方式,你都用过吗?

田维常

spring Boot Starter

阿里P8架构师呕心沥血整理的【Docker实战】文档带你玩转Docker。

Java架构之路

Java 程序员 架构 面试 编程语言

【原创】Spring Boot一口气说自动装配与案例

田维常

spring Boot Starter

【原创】Spring Boot 如何手写stater

田维常

spring Boot Starter

2020双十一终极清单!阿里云CDN&视频云最全优惠攻略

阿里云Edge Plus

CDN

MySQL-技术专题-创建临时表

洛神灬殇

  • 扫码添加小助手
    领取最新资料包
Redis开源文档《Redis设计与实现》发布_语言 & 开发_水羽哲_InfoQ精选文章