我们之前提到过,redis中key只能是字符串类型,而value有多种类型。
redis中的数据结构有自己独特的实现方式能根据特定的场景进行优化
1. string(字符串)
内部编码:
- raw:最基本的字符串,类比我们平常使用的String
- int:当value是一个整数时可能会直接使用一个int来存
- embstr:短字符串,针对短字符串进行特殊优化
可以通过命令查看value的实际编码方式:
object encoding key
2. hash(哈希表)
内部编码:
- hashtable:哈希表,这里的hashtable并非Java中的hashtable,但实现思想大致相同
- ziplist:压缩列表,hash表中元素比较少的时候会优化为ziplist节省空间
3. lsit(列表)
内部编码:
- inkedlist:链表
- ziplist:压缩列表,同样链表中元素少时会优化为ziplist节省空间
4. set(集合)
内部编码:
- hashtable:哈希表
- intset:集合中都是整数会优化为intset
5. zset(有序集合)
zset会额外存储一个score(权重,分数)用于排序
内部编码:
skiplist:跳表,跳表也是链表,每个节点上有多个指针域,通过这些搭配指针域的指向实现O(logN)的查询复杂度