redis为何单线程 效率还这么高 为何使用跳表不使用B+树做索引(阿里)
如果想了解 redis 与Memcache的区别参考: Redis和Memcache的区别总结 阿里的面试官问问我为何redis 使用跳表做索引,却不是用B+树做索引 因为B+树的原理是 叶子节点存储数据,非叶子节点存储索引,B+树的每个节点可以存储多个关键字,它将节点大小设置为磁盘页的大小,充分利用了磁盘预读的功能。每次读取磁盘页时就会读取一整个节点,每个叶子节点还有指向前后节点的指针,为的是最大限度的降低磁盘的IO;因为数据在内存中读取耗费的时间是从磁盘的IO读取的百万分之一 而Redis是 内存中读取数据,不涉及IO,因此使用了跳表; 至于redis的跳表原理 参考: 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里) mysql的B+索引原理 参考: 一步步分析为什么B+树适合作为索引的结构 以及索引原理 (阿里面试) Kafka索引 参考: kafka如何实现高并发存储-如何找到一条需要消费的数据(阿里) 接下来问题来了:为何 redis使用单线程 读取速度还这么块呢 今天下午,烟哥吃饱了撑着没事干,上班时间到处工(zhuang)作(bi)!只见同事小刘的桌上摆了一本Redis相关的书籍,内心嘿嘿一笑:“终于,又有机会勾搭小刘了!” 于是有了如下对话 "嗯,不要方,跟着我思路来想!"烟哥道。