redis快速的秘密--待补充

126 阅读2分钟

首先,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

跳表就是在链表的基础上就行了多级索引。