目录
- 数据类型:
- 编码方式
- String:
- hash:
- list:
- set:
- zset:
- 通过这个指令可以看到底层实现
数据类型:
Redis底层实现上述数据结构的时候,会在源码层面,针对上述实现进行优化,来达到节省时间/空间的效果:
Redis向你承诺,我这有一个hash表,你进行查询,插入,删除操作,时间复杂度为O(1),但是这个背后的实现不一定就是一个标准的hash表,可能在特定的场景下,使用别的数据结构,但是仍然保证时间复杂度符合承诺!
编码方式
String:
- raw:最基本的字符串
- int:redis通常可以用来实现“计数”功能:当value就是一个整数int的时候,redis会直接用int来保持
- embstr:针对短字符的特殊优化
hash:
- hashtable:最基本的哈希表
- ziplist:压缩列表,在哈希表里面元素比较小的时候,会压缩为list。它可以节省空间
list:
- linklist:链表
- ziplist:压缩列表
redis 3.2开始,引入quicklist(一个链表,每一个元素是一个ziplist)把空间和效率能折中的兼顾到
set:
- hashtable
- intset:集合中都是整数
zset:
- skiplist:跳表,也是链表,每个结点上有多个指针域(针对分数,权重)
- ziplist
通过这个指令可以看到底层实现
OBJECT encoding [key1]
redis会自动根据当前的实际情况选择内部的数据结构,自适应的。