如前文所述,Redis 自带数据类型包括:string、hash、list、set 和 zset,但它们实际上只是 redis 的外部数据类型。Redis 还自带一套内部的编码实现,可以通过以下命令查询键的实际内部编码类型:

1
2
3
# 组合命令
object encoding hello
"embstr"

数据结构和内部编码

string int(小于8B)/embstr(小于39B)/raw(其他)

hash hashtable/ziplist

list linkedlist/quicklist/ziplist

set hashtable/intset

zset skiplist/ziplist

ziplist 对复杂数据结构几乎是万能的。他的特点是比较节省内存,但在数据元素较多的情况下性能比较容易下降。