首先,redis为什么这么快。
1.他是基于内存的,硬件上就比磁盘要快。
2.redis有自己的数据结构,是用c语言编写的。
string类型的编码,如果存储的是数字,那么就会使用int来存储,如果是字符串的话就会使用embstr来存储,如果他大于39字节,那么就会使用raw来存储。
这是string类型,可以看出,已经做出了很大的改变,如果使用的是c语言的string,那么他的时间复杂度,将会达到o(n),如果使用的是自己的,时间复杂度就会是o(1).
list, zset,hash,当他们中的元素的个数和元素的大小都不超过指定数值,也就是默认的512个大小和64字节的话,就会使用默认的ziplist,如果超过这个大小,就会使用不一样的数据结构,其中set和hash的第二种情况是一样的,使用的都是hashtable,list第二种情况使用的则是linkedlist,zset使用的是skiplist,也就是大名鼎鼎的跳表。 还有set的第一种情况是intset。
详细划分就是 list 列表中元素小于512并且数值小于64字节,那么就是ziplist,否则就是linkedlist
string,如果是小于8字节的长整型那么就是int,如果小于39字节那么就是embstr,如果大于39字节那么就是raw
set,如果元素个数小于512,并且元素值小于64,那么存储类型位intset,否则为hashtable
zset,如果元素个数小于512,并且元素大小小于64字节,则存储类型为ziplist,否则就是skiplist
跳表就是在链表的基础上就行了多级索引。