redis SDS 回顾:
1、redis 只会使用C字符串作为字面量,在大多数情况下,redis使用SDS(简单动态字符串)做为字符串表示。
2、比起C字符串,SDS字符串具有以下优点:
redis 链表回顾:
1、链表被广泛用于实现redis的各种功能,比如列表键、发布与订阅、慢查询、监视器等。
2、每个链表节点由一个listNode 结构来表示,每个节点都有一个指向前置节点和后置节点的指针。所以redis链表的实现是双端链表。
3、每个链表由一个list结构来表示,这个结构带有表头节点指针、表尾节点指针,以及链表长度信息。
4、因为链表表头节点指针和尾节点指针都是指向NULL,所以redis的实现是无端链表。
redis字典回顾:
1、字典被广泛用于实现redis的各种功能,其中包括数据库和哈希键。
2、redis的字典使用哈希表作为底层实现,每个字典代表两个哈希表,一个在平时使用,另一个在rehash时使用。
3、当字典被用作数据库的底层实现,或者哈希键的底层实现时,redis使用murmurHash2() 方法来计算哈希键的值。
4、哈希表使用链接地址来解决hash冲突,被分配到同一个节点的多个hash值会被分配为一个单向链表。
5、在对hash表进行扩展或者收缩操作时,程序需要将现有hash表所包含的全部键值对重新rehash到新的hash表中,这个过程并不是一次性完成的,是渐进式完成的。
redis跳跃表回顾:
1、跳跃表是一种有序数据结构,他通过在某个节点中维持多个指向其他节点的指针,从而达到快速访问其他节点的目的。
2、redis使用跳跃表来作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者集合中元素的成员是比较长的字符串,redis就会使用跳跃表来作为集合键的底层实现。
3、redis只在两个地方用到了跳跃表,一个用于实现redis有序集合键的底层实现,另一个是在集群节点中用作内部数据结构。
4、每个跳跃表的层高都是1到32之间的整数。
5、在同一个跳跃表中,多个节点可以包含相同的分值,但是每个节点的成员对象必须唯一。
6、跳跃表中的节点按照分值大小进行排序,当分支大小相同时,按照成员大小的值进行排序。
redis整数集合回顾:
1、整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,redis就会使用整数集合作为集合键的底层实现方式。
2、当我们将一个新的元素添加到整数集合中时,如果该元素的类型比现有集合中所有的元素类型都要长的时候,这时,该集合会进行升级,然后才能将新元素添加到整数集合中去。
升级分为3步进行:
4、整数集合是集合键的底层实现之一。
5、证书集合的底层实现维数组,这个数组以有序、无重复的方式保存集合元素,在有需要时,程序会根据新增加的元素类型改变数组的类型。
6、证书集合只支持升级操作,不支持降级操作。
redis压缩列表回顾:
1、压缩列表是hash键和列表键的实现之一。当一个列表键只包含少量的列表项时,并且每个列表项是比较小的整数值,或者是比较短的字符串时,那么redis就会使用压缩列表来做列表键的底层实现。另外当一个hash键只包含少量键值对时,并且每个键值对的键和值都是小整数值或者较短的字符串时,redis就会使用压缩列表来作为列表的底层实现。
2、压缩列表是一种为节约内存而单独开发的一种顺序性数据结构。
3、压缩列表被用作列表键和hash键的实现方式之一。
4、压缩列表可以包含多个节点,每个节点可以保存一个字节数组和一个整数值。
5、添加新节点或者删除节点,会引发连锁更新操作。