Redis 设计与实现 Cover

Redis 设计与实现

黄健宏
《Redis 设计与实现》一书全面而完整地讲解了 Redis 的内部运行机制, 对 Redis 的大多数单机功能以及所有多机功能的实现原理进行了介绍, 展示了这些功能的核心数据结构以及关键的算法思想。 通过阅读本书, 读者可以快速、有效地了解 Redis 的内部构造以及运作机制, 从而学会如何更高效地使用 Redis 。

「Redis 设计与实现」读书笔记

闲余时间读的一本书。

Redis 是基于 C 语言编写的,所以常用的数据结构基本都需要自己实现。

对于字符串 Redis 实现了类似 std::string 的功能,具体是自动增长和 O(1) 时间复杂度的长度查询。使用额外的变量记录字符串的长度,而不是通过终止符 '\0' 来判断字符串结束。这样的好处这个字符串是 Binary-safe 的,可以使用字符串储存二进制数据。

对于哈希表 Redis 提供了 rehash 的操作,能在哈希表负载因子过高的时候进行哈希表的扩容。而扩容过程是逐步进行的,当一个 kv 对被 CRUD 的时候,会被 rehash 到新表。特别地,创建新 kv 对的时候,只会写入新表;读取的时候,先在旧表读,如果找不到,再在新表读。

对于整数集合,Redis 使用一个有序数组实现。为了节约空间,Redis 会判断储存这个集合需要的整数类型,例如是 int32_t 或者是 int16_t在插入新元素的时候,有可能需要升级类型,因为这个新元素的绝对值肯定比集合里面的元素都要大,所以只可能放在数组头或者数组尾,换言之升级类型时是可以一个一个数顺序转换并放到对应位置的,不需要开辟额外的空间完成这个操作。

TBC