Redis数据结构

概述

alt text

  • 字符串:等同于std::string
  • 哈希:等同于std::unoredered_map
  • 列表:等同于std::vector
  • 集合:等同于std::set
  • 有序集合:等同于std::map

数据结构redishash背后的实现,不一定是一个标准的哈希表。在特定的场景下,使用别的数据结构实现,但是保证时间复杂度符合承诺。
编码方式redis内部底层的实现。redis所有的key都是字符串,value的类型是存在差异的

数据结构和内部编码

数据结构 内部编码 介绍
string raw 最基本的字符串(底层就是持有一个char数组)
int redis通常也会用来实现一些计数这样的功能,当value就是一个整数的时候此时可能redis会直接使用int来保存
embstr 针对短字符串进行特殊优化
hash hashtable 最基本的哈希表
ziplist 压缩列表,可以节省空间。当哈希表元素比较少的时候,可能就优化为ziplist。
list linkedlist 链表
ziplist 压缩列表,可以节省空间。当链表元素比较少的时候,可能就优化为ziplist。
set hashtbale 最基本的哈希表
inset 结合中存的都是整数时,使用inset进行优化
zset skiplist 跳表,也是一种链表,每个节点上有多个指针域,巧妙的搭配这些指针域的指向,就可以做到,从跳表上查询元素的时间复杂度为O(logN)
ziplist 压缩列表,可以节省空间。当有序集合元素比较少的时候,可能就优化为ziplist。

注意:从redis3.2开始,引入了新的实现方式,quicklist。同时兼顾了linkedlistziplist的有点。quicklist就是一个链表,每个元素又是一个ziplistquicklist比较类似于std::deque