Redis

1.指针函数与函数指针

指针函数本质是指针,其返回值是指针。如 float *fun(); 函数指针,本质是指针。如int(*f) (intx);/*声明一个函数指针*/  从直观上看*号要是和函数名括在一起那么是函数指针 没有的括在一起的话是指针函数。

2.Redis链表类型

I.节点是双端链表

II.链表(list)除了有头指针,尾指针还包括链表长度。

3.Redis字典

I.三个重要结构:字典->哈希表->哈希节点

1) 字典包括大小为2的哈希表数组。哈希表结构中又包括哈希表节点数组。哈希节点有后继节点。即:哈希表节点数组每个元素指向哈希节点链表

2) 为了提高插入效率都是在哈希表节点均在前面插入,新插入的节点会成为头节点。

3)字典中哈希表(一般使用ht[0]进行操作,ht[1]用于rehash。rehash结束后两个数组交换,并释放交换后的ht[1]的空间)

4)MurmurHash2算法计算哈希值;地址链接法解决hash冲突

II. rehash

1).负载因子=实际哈希节点数 / 哈希节点数组大小 【load_factor = ht[0].used / ht[0].size】。负载因子越大空间开销越小,查找越慢。

2).触发时机:

    a) 负载因子大于5或者(load_factor >= 1且执行BGSABE或BGREWRITEAOF命令时哈希表扩张。   

    b)load_factor < 0.1 触发哈希表收缩。

3).渐进式rehash

    a)  开始期间字典中的rehashIndex字段大于-1,rehash结束rehashIndex重置为-1。

    b) rehash期间维护两个哈希表:查找的时候现在ht[0]中查找,若不成功再去ht[1查找;要是添加的话直接在hash[1]中进行,保证ht[0]只减不增.

4.跳跃表

5.整数集合(intset)

I.有序且不重复

6.压缩列表(ziplist)

I.节点:previous_enrty_length,encoding,content组成

1)previous_enrty_length 前一个节点的长度

2)encoding:数据类型 + 数据长度

00,10,10开头表示字节数据类型,11开头表示为整数。

其中00 开头表示编码长度为1字节,后6位表示数组实际长度,且content字节数组长度<=63;

其中01 开头表示编码长度为2字节,后14位表示数组实际长度,content字节数组长度<=16383;

其中10开头表示编码长度为5字节,后32位表示数组实际长度,content字节数组长度<=4294967295。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字典 Redis 中的字典 由 dict.h/dict 结构表示: type 和 privdata 是针对不同类型...
    jiangmo阅读 557评论 2 0
  • 引入 Redis对外提供了5种类型:字符串、列表、集合、有序集合以及哈希表,但底层实现并不是固定的,以上五种数据结...
    宇宙最强架构师阅读 683评论 0 3
  • 字典,又称符号表,是保存键值对的抽象数据结构。很多语言都内置字典这种常用的数据结构,但是C语言没有内置,所以red...
    舒小贱阅读 1,333评论 0 2
  • 写这篇文章的时候正处于从无锡回南京(家)的高铁上,看着窗两侧的世界向后快速奔跑;也幻想着推开家门那一刻孩子看我惊讶...
    康庄大道2017阅读 216评论 0 0
  • 我有个哥哥,尽管我基本上没有叫过他哥哥,因为他只比我大6个月,我们来自一个族系,本家那种,从小在一个班级,直到初中...
    7f8903e23e9e阅读 160评论 0 0