20 redis为何使用跳表而不是B+树

vvEcho 2025-03-05 10:27:37
Categories: Tags:

首先二者的时间复杂度都是O(logN),选择跳表还是B+树主要是考虑的内存和磁盘硬件特性。

对于Redis使用跳表来讲,其在“写操作”时相较于B+树的“写操作”,无需考虑自旋平衡的问题,也就是跳表更容易实现写入操作;

再看“读操作”,Redis是基于内存的,跳表比B+树多读那几下的性能开销微乎其微。(一方面是内存读写块,另一方面是内存小,存的数据少);但是redis存储的数据少且是重要的数据用的是内存,而mysql存储的是业务数据用的是磁盘

对于MySQL使用B+树,在“读操作”方面(在单表记录规范2000w的情况下)只需要读三层即可完成查找;而执行“写操作”时,MySQL需要维护自己的树平衡,这部分会比跳表开销大,而MySQL的数据更多的场景下是读多写少

所以MySQL使用B+树,Redis使用跳表在一般场景下会比较合适,尤其是MySQL结合Redis一起用的情况。