Zset为什么要使用两种数据结构?
Zset为什么要使用两种数据结构?
提示
**题眼:**冷门题目。时间换空间,空间换时间。
面对不同数量的数据情况,需要用不同的数据结构。
数据量小的情况,需要压缩内存:选压缩链表(以时间换空间)
数据量大的情况,需要提查询效率:选跳表(以空间换时间)
重要
参考答案:
Zset它的底层是压缩链表和跳表来实现的,当数据量不多的时候,用压缩链表,数据量大的时候会用跳表。我认为主要原因是Redis本身是个内存存储,它既要考虑空间又要考虑时间的,当数据量小的时候,存储开销不大,然后On的查询效率也基本能接受。当数据量比较大的时候,因为On不是开销会变大吗,这个时候会切到跳表上,它的话可以提供相对稳定的Ologn,但会增加索引的开销,相当于用空间来换时间。然后,我记得Redis里有一个配置表,它有两个参数来控制什么时候切换,一个是元素的个数,一个是占用的内存大小。Redis这样做,可以在有限的资源里,尽可能的提高使用效率。
