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)结构

  

三、列表

四、集合

五、有序集合

 

 

 

 

 

 

 

 

  

posted on 2019-10-13 19:54  song.yan  阅读(299)  评论(0)    收藏  举报