String(字符串)
string 字符串(可以为整型、浮点型和字符串等,统称为元素)。
数据结构
String 的内部就是一个字符数组,Redis的字符串是动态字符串,是可以修改的字符串,它采用预分配的冗余空间的方式来减少内存的频繁分配,当字符串的长度小于1MB时,扩容都是加倍现有的空间。如果字符串的长度超过1MB,扩容时一次 只会多扩1MB的空间,需要注意的是字符串的最大长度为512MB。
List
list 列表(实现队列,元素不唯一,先入先出原则)。
数据结构
List数据结构是链表型的,类似于LinkedList。所以它的插入效率非常高,时间复杂度为O(1)。它的查询效率较慢,时O(n)。
但其实Redis内部,list结构又不是一个简单的链表,因为LinkedList的每一个节点都要保存上一个节点和下一个节点的指针,相对来说比数组型的列表更占空间。在Redis中,有一种压缩列表的存在zipList,它把少量的元素使用一个连续的内存空间,就像时数组一样,可以节省内存,而list结构就是由多个这种zipList串起来组成的,被称为快速链表quickList。
Hash
hash散列值(hash的key必须是唯一的)
数据结构
参考:https://blog.csdn.net/mccand1234/article/details/93411326
Set
set 集合(各不相同的元素)。
数据结构
redis的集合对象set的底层存储结构特别神奇,我估计一般人想象不到,底层使用了intset和hashtable两种数据结构存储的,intset我们可以理解为数组,hashtable就是普通的哈希表(key为set的值,value为null)。是不是觉得用hashtable存储set是一件很神奇的事情。
set的底层存储intset和hashtable是存在编码转换的,使用intset存储必须满足下面两个条件,否则使用hashtable,条件如下:
1.结合对象保存的所有元素都是整数值
2.集合对象保存的元素数量不超过512个
参考地址:https://www.jianshu.com/p/28138a5371d0
Sort Set
有序集合