• Redis中的数据结构


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

      

    三、列表

    四、集合

    五、有序集合

     

      

  • 相关阅读:
    Google Protocol Buffers学习
    C学习笔记-一些知识
    前端相关
    Spark笔记-gz压缩存储到HDFS【转】
    maven笔记-将本地jar包打包进可执行jar中
    Spark运行时错误与解决
    机器学习笔记
    Spark笔记-DataSet,DataFrame
    云平台各层解释
    linux笔记-多服务器同时执行相同命令
  • 原文地址:https://www.cnblogs.com/excellencesy/p/11668035.html
Copyright © 2020-2023  润新知