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!