这里我们先只介绍五种常用的数据类型~
目录
1、string
- 数据类型:string
- 内部编码:raw、int、embstr
说明: raw是最基本的字符串--底层是一个char数组(此处的char是一个字节的);int是redis中通常用来实现计数功能时,也就是当value为一个整数时,可能redis会直接使用int来保存;embstr专门针对短字符串进行特殊优化处理
2、hash
- 数据类型:hash
- 内部编码:hashtable、ziplist
说明:hashtable就是redis内部哈希表的一个实现;ziplist在哈希表里面元素比较少的时候可能就是优化成ziplist,压缩了列表,能够节省空间~
为啥要进行压缩呢?redis上有很多的key,可能是某些key的value是hash,当key特别多,对应的hash也特别多,但是每个hash又不大的情况下,就尽量去压缩,压缩之后就可以让整体占用的内存更小了~
3、list
- 数据类型:list
- 内部编码:linkedlist、ziplist
说明:linkedlist就是一个链表;ziplist同上,压缩列表;从redis3.2开始,引入了新的实现方式:quicklist, quicklist就是一个链表,而他的每一个元素又是一个ziplist,这样做能够同时兼顾linkedlist和ziplist的优点,把空间和效率都能够兼顾到~
4、set
- 数据类型:set
- 内部编码:hashtable、inset
说明:hashtable同上述的hashtable;inset集合中存的都是整数
5、zset
- 数据类型:zset
- 内部编码:skiplist、ziplist
说明:skiplist:跳表 ,同普通链表不同的是每个节点有多个指针域,能够巧妙的搭配这些指针域的指向,就可以做到~从跳表上查询元素的时间复杂度为O(logN)
上述redis的数据类型中,具体使用哪种编码方式,我们是感知不到的,redis内部都是自适应的~
6、示例
命令:
- 查看数据类型:type key
- 查看内部编码方式:object encoding key