- 1、RedisDb
- 2、dict
- 3、dictht
- 4、dictEntry
- 5、value
在上一篇博客中我们谈及到Redis底层字符串类型为sds,那么这篇博客我们聊一下,Redis整个的Key-Value在C语言中的存储形式是一个什么样子的。
首先我们先看一张总图:
1、RedisDb接下来我们来细细对这一样图分析一下:
2、dictRedisDb是Redis的底层数据结构的开始,里面存放着Redis的数据,一般默认有16个,这个是可以配置的,Redis的数据是以字典的形式在底层展示的,dict详情请看2。
3、dictht里面最重要的有两个变量
1、type:标识整个hashTable的数据类型是什么。
2、dictht ht[2]:表示有两个hashTable,目的是用来扩容,ht[0]是当前数据的存放变量,ht[1]是将来需要扩容时的新hashTable,hdictht的详情请看3。
4、dictEntrydictht里面的四个参数
1、dictEntry:这个就是具体表示Key-Value形式的数据结构,dictEntry的详情请看4。
2、size:表示当前HashTable的大小。
3、sizemark:永远都是size-1,为了到时候计算hashcode时可以将 % 转换成 & 。
4、used:表示hashtable当前已经使用的容量。
5、valuedictEntry里面最重要的三个参数
1、key:这个就是具体表示Key-Value形式的数据结构的key,底层就是SDS。
2、value:这个就是具体表示Key-Value形式的数据结构的value数据结构,详情请看5。
3、next:指向下一个节点的指针。
value里面最重要的五个参数
1、type:代表当前数据的类型是什么,比如string、list、hash、set、zset等。
2、encoding:表示当前数据在内存中的数据结构是什么,比如raw、embstr、int、ziplist等。
3、lru:表示过期算法是哪一种。
4、refcount:C语言得程序员自己管理内存,不像Java有垃圾收集器,这个就是引用计数器,来管理自己的内存,防止内存溢出。
3、*ptr:指向真正得数据,如果是整型值等,则直接存储,如果是很长的字符串(这个到底有多长,和CPU的缓存行有关,在),则存放指向数据的地址。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)