Redis常见的数据类型分为:字符串类型、散列类型、列表类型、集合类型(Set)、有序集合类型(zset)。
一、字符串类型
二、Hash哈希
(1)数据结构
1)zipList(压缩列表):
2)ht(hashtable):
(2)zipList源码分析
1)下面是源码的注释中的一段描述:
压缩列表是一个经过特殊编码的链表,特没有存储上一个节点的指针,也没有存储下一个链表的指针,而是存储的上一个链表的长度跟下一个链表的长度。通过长度计算下一个节点的位置。
这样做的目的就是节省内存,当然这样会牺牲读写的性能,是一种用时间换空间的做法。
只适合用来,key的字段个数比较少,value的值的内容比较小的地方。
2)存储的结构
3)Entry的结构
prevrawlensize:存储上个链表的长度用的空间大小
prevrawlen:上个链表的节点占用的长度
len:当前链表的节点占用的长度
lensize:存储链表节点长度所用的空间大小
headersize:prevrawlensize+lensize
*P:指向当前节点的开始位置
encoding:编码
4)编码
(3)结构
4)使用时机(编码转换的一个的条件)
在redis.conf里面是可以配置的,默认是hash里面entry的数量小于512,并且每个entry里面的value的值都小于64的时候。
(5)ht(heashtable)
1)在redis中KV的数据结构是一个dict,dict是一个数组加链表的数据结构,Redis中的KV是保存在一个dictEntry中的,
在hashtable中对dictEntry又做了多层的封装。
最外层是一个dict,在dict里面放了两个dictht
在dictht里面封装了dictEntry
最内层是dictEntry
1)结构
三、列表
四、集合
五、有序集合