Redis内部数据结构
Redis数据结构
概述

- 字符串:等同于
std::string - 哈希:等同于
std::unoredered_map - 列表:等同于
std::vector - 集合:等同于
std::set - 有序集合:等同于
std::map
数据结构:redis中hash背后的实现,不一定是一个标准的哈希表。在特定的场景下,使用别的数据结构实现,但是保证时间复杂度符合承诺。
编码方式: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。同时兼顾了linkedlist和ziplist的有点。quicklist就是一个链表,每个元素又是一个ziplist。quicklist比较类似于std::deque。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 MyAKDreamのBlog!


