zset底层的数据结构为什么使用调表而不是红黑树[亲测有效]

zset底层的数据结构为什么使用调表而不是红黑树[亲测有效]zset底层的数据结构为什么使用调表而不是红黑树 前言 Redis中使用到的数据结构以及各个数据对象的底层数据结构在上一篇文章已经写得非常详细,这里不再赘述。 https://www.cnblogs.

zset底层的数据结构为什么使用调表而不是红黑树

zset底层的数据结构为什么使用调表而不是红黑树

前言

Redis中使用到的数据结构以及各个数据对象的底层数据结构在上一篇文章已经写得非常详细,这里不再赘述。

https://www.cnblogs.com/ruigedada/p/16248689.html

zset的底层数据结构是压缩列表和跳表,当满足以下条件时,Redis将使用压缩列表存储

  • 有序集合保存的元素个数要小于 128 个;

  • 有序集合保存的所有元素成员的长度都必须小于 64 字节。

我们都知道,调表的查找时间复杂度为O(logn),但是红黑树和AVL树的查找效率也是O(logn)呀,为什么zset的底层是调表而不是红黑树或者AVL树呢?

一、跳表、红黑树和AVL树的区别

跳表 红黑树 AVL树
查询时间复制度 O(logn) O(logn) O(logn)
插入/删除效率 最高 最低
范围查询效率
实现难易
  • 1、虽然跳表,红黑树和AVL树的查找时间复杂度都是O(logn),但相比于跳表,红黑树和AVL树的插入/删除效率更低。为什么呢?

    • 跳表在插入或者删除时,我们只需要考虑相邻两个结点就可以了,其插入删除的过程和链表的过程实际上是差不多的,只是需要考虑索引的问题。

    • 红黑树和AVL树都是自平衡树,所以在插入和删除时会涉及到结点的旋转问题,因此其效率不如跳表,而AVL树是一个严格的平衡树,追求的是绝对的平衡,因此其效率比红黑树还不如,这也是HashMap不使用AVL树的原因之一。

  • 2、对于范围查找来说,跳表只需要查找最小的那个值,然后往后遍历就可以了。

  • 3、因为不需要旋转操作,因此跳表的实现更简单

原文地址:https://www.cnblogs.com/ruigedada/archive/2022/05/14/16270084.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5267.html

(0)
上一篇 2023-05-16
下一篇 2023-05-16

相关推荐

  • MySQL的Explain总结「终于解决」

    MySQL的Explain总结「终于解决」Explain简介 MySQL优化器在基于成本的计算和基于规则的SQL优化会生成一个所谓的执行计划,我们就可以使用执行计划查看MySQL对该语句具体的执行方式。 介绍这个好啰嗦就是了,我们可以通过这个

    2023-05-19
    141
  • Redis学习笔记(二十一) 事务

    Redis学习笔记(二十一) 事务文章开始啰嗦两句,写到这里共21篇关于redis的琐碎知识,没有过多的写编程过程中redis的应用,着重写的是redis命令、客户端、服务器以及生产环境搭建用到的主从、哨兵、集群实现原理,如果你真的能

    2023-03-11
    151
  • MySQL8开启ssl加密

    MySQL8开启ssl加密1 概述 MySQL从5.7开始默认开启SSL加密功能,进入MySQL控制台后输入status可以查看ssl的状态,出现下图表示在使用ssl: 另外,ssl加密需要密钥与证书,可以使用openssl…

    2023-02-10
    246
  • Ubuntu安装Cloudera Manager以及CDH5.15.2「终于解决」

    Ubuntu安装Cloudera Manager以及CDH5.15.2「终于解决」一、机子分配 注意,本安装教程是在真机上进行,而非虚拟机。另,此次搭建主要的目的是搭建测试环境,让Hadoop各组件能够运作起来即可,完成搭建后,将用小数据量进行相关数据的计算与测试。线上环境将会使用

    2023-03-30
    137
  • 如何更新pip版本

    如何更新pip版本pip是Python的官方包管理工具,它可以帮助用户安装、卸载和更新Python库。在这篇文章中,我将讨论几个问题,例如:如何更新pip版本、pip更新命令、如何更新pip的版本、从pip更新Python版本、Anaconda更新pip版本、cmd怎么更新pip版本、更新pip版本失败以及pip更新库指定版本等问题。

    2024-08-05
    30
  • 关系型数据库功能的核心定位_关系型数据库的结构层次

    关系型数据库功能的核心定位_关系型数据库的结构层次1. 相关概念 1.1 内/外/全联接 假设有两张表,一张本校的校友信息表 t1,一张两院院士信息表 t2,使用二者的身份证号码(ID字段)来关联(即t1.ID=t2.ID)。 内联接:在两张表进行…

    2023-02-23
    147
  • Python可以使用if语句定义条件语句

    Python可以使用if语句定义条件语句Python是一种高级编程语言,如果您在编写代码时需要执行具有不同条件的不同操作,您可以使用条件语句if。Python的if语句提供了一个简单的方法来判断特定条件是否为真,并且根据条件的结果,执行不同的代码段。

    2024-03-18
    83
  • 【静态数据】民族「建议收藏」

    【静态数据】民族「建议收藏」/* Navicat MySQL Data Transfer Source Server : root Source Server Version : 50717 Source Host : loc…

    2022-12-15
    154

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注