压箱底!阿里 P8 大牛连肝 33 天手撸 406 页 Redis 核心笔记,玩转 Redis

提问?

Redis 的五种数据类型分别是由什么数据结构实现的?

  1. Redis 的字符串数据类型既可以存储字符串(比如"hello world"),又可以存储整数和浮点数(比如 10086 和 3.14),甚至是二进制位(使用 SETBIT 等命令),Redis 在内部是怎样存储这些值的?

  2. Redis 的一部分命令只能对特定数据类型执行(比如 APPEND 只能对字符串执行,HSET 只能对哈希表执行),而另一部分命令却可以对所有数据类型执行(比如 DEL、TYPE 和 EXPIRE),不同的命令在执行时是如何进行类型检查的?Redis 在内部是否实现了一个类型系统?

  3. Redis 的数据库是怎样存储各种不同数据类型的键值对的?数据库里面的过期键又是怎样实现自动删除的?

  4. 除了数据库之外,Redis 还拥有发布与订阅、脚本、事务等特性,这些特性又是如何实现的?

  5. Redis 使用什么模型或者模式来处理客户端的命令请求?一条命令请求从发送到返回需要经过什么步骤?

为了找到这些问题的答案,我在搜索引擎上面进行查找,可惜的是这次搜索并没有多少收获:Redis 还是一个非常年轻的软件,对它的最好介绍就是官方网站上面的文档,但是这些文档主要关注的是怎样使用 Redis,而不是介绍 Redis 的内部实现。

综合来看,详细而且完整地介绍 Redis 内部实现的资料,无论是外文还是中文都不存在。意识到这一点之后,我决定自己动手注释 Redis 的源代码,从中寻找问题的答案,并通过写博客的方式与其他 Redis 用户分享我的发现。在积累了七八篇 Redis 源代码注释文章之后,我想如果能将这些博文汇集成书的话,那一定会非常有趣,并且我自己也会从中学到很多知识。于是我开始创作《Redis 设计与实现》,之后加以改进终于完成这份《Redis 设计与实现》!!!现在分享给大家

《Redis 设计与实现》对 Redis 的大多数单机功能以及所有多机功能的实现原理进行了介绍,展示了这些功能的核心数据结构以及关键的算法思想。通过阅读本书,读者可以快速、有效地了解 Redis 的内部构造以及运作机制,这些知识可以帮助读者更好、更高效地使用 Redis。

扫描二维码关注公众号,回复: 14540513 查看本文章

内容简介

本书主要分为四大部分。

  1. 第一部分“数据结构与对象”介绍了 Redis 中的各种对象及其数据结构,并说明这些数据结构如何影响对象的功能和性能。

  2. 第二部分“单机数据库的实现”对 Redis 实现单机数据库的方法进行了介绍,包括数据库、RDB 持久化、AOF 持久化、事件等。

  3. 第三部分“多机数据库的实现”对 Redis 的 Sentinel、复制(replication)、集群(cluster)三个多机功能进行了介绍。

  4. 第四部分“独立功能的实现”对 Redis 中各个相对独立的功能模块进行了介绍,涉及发布与订阅、事务、Lua 脚本、排序、二进制位数组、慢查询日志、监视器等。

第一章 引言:本章节介绍了书籍内容概括+内容安排及内容简介

第一部分“数据结构与对象"

第二章 简单动态字符串

  • 2.1 SDS 的定义

  • 2.2 SDS 与 C 字符串的区别

  • 2.3 SDS API

  • 2.4 重点回顾

  • 2.5 参考资料

第三章 链表

  • 3.1 链表和链表节点的实现

  • 3.2 链表和链表节点的 API

  • 3.3 重点回顾

第四章 字典

  • 4.1 字典的实现

  • 4.2 哈希算法

  • 4.3 解决键冲突

  • 4.4 rehash

  • 4.5 渐进式 rehash

  • 4.6 字典 API

  • 4.7 重点回顾

第五章 跳跃表

  • 5.1 跳跃表的实现

  • 5.2 跳跃表 API

  • 5.3 重点回顾

第六章 整数集合

  • 6.1 整数集合的实现

  • 6.2 升级

  • 6.3 升级的好处

  • 6.4 降级

  • 6.5 整数集合 API

  • 6.6 重点回顾

第七章 压缩列表

  • 7.1 压缩列表的构成

  • 7.2 压缩列表节点的构成

  • 7.3 连锁更新

  • 7.4 压缩列表 API

  • 7.5 重点回顾

第八章对象

  • 8.1 对象的类型与编码

  • 8.2 字符串对象

  • 8.3 列表对象

  • 8.4 哈希对象

  • 8.5 集合对象

  • 8.6 有序集合对象

  • 8.7 类型检查与命令多态

  • 8.8 内存回收

  • 8.9 对象共享

  • 8.10 对象的空转时长

第二部分“单机数据库的实现”

第九章 数据库:对 Redis 数据库的实现原理进行了介绍,说明了服务器保存键值对的方法,服务器保存键值对过期时间的方法,以及服务器自动删除过期键值对的方法等等。

第十章 RDB 持久化:第 10 章“RDB 持久化”和第 11 章“AOF 持久化”分别介绍了 Redis 两种不同的持久化方式的实现原理,说明了服务器根据数据库来生成持久化文件的方法,服务器根据持久化文件来还原数据库的方法,以及 BGSAVE 命令和 BGREWRITEAOF 命令的实现原理等等。

第十一章 AOF 持久化

第十二章 事件:对 Redis 的文件事件和时间事件进行了介绍

第十三章 客户端:对 Redis 服务器维护和管理客户端状态的方法进行了介绍,列举了客户端状态包含的各个属性,说明了客户端的输人缓冲区和输出缓冲区的实现方法,以及 Redis 服务器创建和销毁客户端状态的条件等等。

第十四章 服务器:对单机 Redis 服务器的运作机制进行了介绍,详细地说明了服务器处理命令请求的步骤,解释了 serverCron 函数所做的工作,并讲解了 Redis 服务器的初始化过程。

第三部分“多机数据库的实现”

第十五章 复制:对 Redis 的主从复制功能( master-slave replication)的实现原理进行了介绍,说明了当用户指定一个服务器(从服务器)去复制另一个服务器(主服务器)时,主从服务器之间执行了什么操作,进行了什么数据交互,诸如此类。

第十六章 Sentinel:对 Redis Sentinel 的实现原理进行了介绍,说明了 Sentinel 监视服务器的方法,Sentinel 判断服务器是否下线的方法,以及 Sentinel 对下线服务器进行故障转移的方法等等。

第十七章 集群:对 Redis 集群的实现原理进行了介绍,说明了节点(node)的构建方法,节点处理命令请求的方法,转发( redirection)错误的实现方法,以及各个节点之间进行通信的方法等等。

第四部分“独立功能的实现”

第十八章 发布与订阅:对 PUBLISH、SUBSCRIBE、PUBSUB 等命令的实现原理进行了介绍,解释了 Redis 的发布与订阅功能是如何实现的。

第十九章 事务:对 MULTI、EXEC、WATCH 等命令的实现原理进行了介绍,解释了 Redis 的事务是如何实现的,并说明了 Redis 的事务对 ACID 性质的支持程度。

第二十章 Lua 脚本:对 EVAL、EVALSHA、SCRIPT LOAD 等命令的实现原理进行了介绍,解释了 Redis 服务器是如何执行和管理用户传入的 Lua 脚本的;这一章还对 Redis 服务器构建 Lua 环境的过程,以及主从服务器之间复制 Lua 脚本的方法进行了介绍。

第二十一章 排序:对 SORT 命令以及 SORT 命令所有可用选项(比如 DESC、ALPHA、GET 等等)的实现原理进行了介绍,并说明了当 SORT 命令带有多个选项时,不同选项执行的先后顺序。

第二十二章 二进制位数组:对 Redis 保存二进制位数组的方法进行了介绍,并说明了 GETBIT、SETBIT、BITCOUNT、BITOP 这几个二进制位数组操作命令的实现原理。

第二十三章 慢查询日志:对 Redis 创建和保存慢查询日志( slow log)的方法进行了介绍,并说明了 SLOWLOG GET、SLOWLOG LEN、SLOWLOG RESET 等慢查询日志操作命令的实现原理。

第二十四章 监视器:介绍了将客户端变为监视器( monitor)的方法,以及服务器在处理命令请求时,向监视器发送命令信息的方法。

猜你喜欢

转载自blog.csdn.net/weixin_70730532/article/details/126972556