Redis学习,QuickList vs 跳表 区别
先给定调两者都是「优化普通链表」的结构但用途完全不一样——QuickList解决“内存浪费操作卡顿”跳表解决“查找太慢”记住这句话看完直接分清。1. QuickList普通链表的「内存省不卡顿」优化版先想两个痛点小白也能懂普通双向链表每个元素都带2个指针前后指向内存浪费多而且元素散落在内存各处CPU读取慢纯Ziplist紧凑列表所有元素挤在一块连续内存内存超省但元素多了之后插入/删除要挪动一整块内存巨卡。QuickList的核心操作把大的Ziplist切成一个个小Ziplist再用双向链表串起来相当于“分袋装东西”。大白话特点小白重点记不用记复杂算法它没有索引查找还是“挨个遍历”但比普通链表快因为小Ziplist是连续内存CPU一次能读一堆主打「头尾操作快」比如往开头加元素、往结尾删元素适合做队列、栈Redis的List底层就是它不要求元素有序怎么存都可以核心是“省内存、不卡顿”。极简结构文字版一眼懂双向链表 → 小Ziplist1元素1-10 → 小Ziplist2元素11-20 → 小Ziplist3元素21-302. 跳表普通链表的「查找加速器」链表版二分痛点普通链表找元素只能从头一个个挪比如找第1000个元素要挪1000次太慢。跳表的核心操作给有序链表建“多层索引”相当于给链表修了“高架桥”不用一步步挪能大步跳着找。大白话特点小白重点记必须有序无序的话索引没用就像高架桥没路标没法跳查找逻辑和二分一样从最高层索引开始跳跳不过去就降一层直到找到目标比如找第1000个元素可能只需要跳10次插入、删除也快先靠索引快速找到位置再改指针不用挪内存整体速度和红黑树差不多但实现更简单高层索引靠“抛硬币”随机建50%概率往上建一层不用复杂操作天然平衡。极简结构文字版一眼懂层3高架桥1 → 100 → 1000层2主干道1 → 10 → 50 → 100 → 500 → 1000层1小路1 → 5 → 10 → ... → 1000底层原始链表所有元素依次排列3. 两者核心区别一句话分清用途不同QuickList管“省内存、不卡顿”主打头尾操作跳表管“快速查找”主打有序查询、范围查询索引不同QuickList无索引只能挨个遍历跳表有多层索引能跳着找有序性QuickList可无序跳表必须有序速度QuickList头尾操作O(1)查找O(n)跳表查找、插入、删除都是O(logn)。