Redis:插入元素在开头还是结尾时,ZADD 是否比 O(logN) 更好?

2023-12-05

雷迪斯文档对于 ZADD 来说,操作是 O(logN).

然而,有谁知道 ZADD 是否比 O(logN) 当插入的元素位于排序顺序的开头或结尾时?

例如。对于某些实现,这可能是 O(1)。

具体来说,redistutorial指出:

排序集是通过双端口数据结构实现的,其中包含 既是跳跃列表又是哈希表,所以每次我们添加一个元素 Redis 执行 O(log(N)) 手术。

修改跳过列表以支持 O(k) 在开头和结尾插入,其中k是跳跃列表的最大级别。


我在 Redis 网站上交叉发布了这个问题,Pieter Noordhuis 在那里提供了答案,我将其交叉发布在这里:


那是对的。排序集依靠 RNG 来确定每个节点的级别数(它是一种概率数据结构)。在跳表开头插入/删除元素的复杂度可能是 O(1),而理论上最坏情况的性能是 O(N)(每个节点都具有相同的级别)。但是,当考虑节点之间级别的分布时,摊余时间复杂度为 O(log N)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis:插入元素在开头还是结尾时,ZADD 是否比 O(logN) 更好? 的相关文章

随机推荐

  • 努力在shinyapps.io中将我自己的API密钥与googlesheets4一起使用

    我已经让 googlesheets4 在shinyapps io 中工作 代码如下 gs4 auth email email protected path NULL scopes https www googleapis com auth
  • MATLAB:循环绘图

    我尝试在循环内进行绘图 但它仅打印最后一个绘图 我该如何修复它 我尝试过使用hold on and drawnow在情节定义之后但它不起作用 这是我的代码 for t 1 5 alive Game World Generations spe
  • 性能调优 WCF 服务

    对于 WCF Web 服务来说 最重要的性能调整领域是什么 ASP net 线程设置 WCF 节流 请查看下面的文章和白皮书 我认为它们应该为您提供更具体的性能考虑因素供您探索 并可能提供一些非常实用的设置来调整 优化或更改 我也在另一个问
  • 如何使用 python 在heroku 中连接 postgresql 时使用 dj-database-url

    我来这里是因为我对 heroku python django postgresql 小组非常陌生 我在 google 上搜索了 dj database url 的用法 但我不明白为什么在开发需要与 postgresql 连接的 python
  • CakePhp 错误的身份验证重定向

    我刚刚开始学习 Auth 组件 但在重定向方面遇到了问题 我的本地应用程序的路径是 localhost school 但是当登录的用户尝试访问某个网址时 他不允许该网站重定向到 localhost school school 并显示 请求的
  • jQuery UI 令牌

    我按照本教程使用 jQuery UI 生成 Facebook 令牌 例如 http net tutsplus com tutorials javascript ajax how to use the jquery ui autocomple
  • 自动装配到列表中时的 Bean 顺序

    我定义了一个接口IWorker以及它的一些实现WorkerA and WorkerB 都注释为 Component 然后我通过以下方式将它们自动连接到我的应用程序中 Autowired private List
  • 如何从 NSData 字符串数据(不是 UIImage)创建 CGImageRef

    如何在没有 UIImage 的情况下创建新的 CGImageRef 我不能使用image CGImage 我从服务器进程接收到一个以 std string 形式存在的 Base64 编码图像 下面代码的第一部分模拟接收编码字符串 UIIma
  • 股票预测:GRU 模型预测相同的给定值而不是未来的股票价格

    i was just testing this model from kaggle post this model suppose to predict 1 day ahead from given set of last stocks A
  • 为什么colspan影响html表格边框

    所以我偶然发现了一些对我来说似乎很奇怪的东西 例如 以下代码 table tr td align center style border 3px solid black Title td tr tr td style border 2px
  • 如何检查jframe是否打开?

    我下面的代码创建一个新数组并将其发送到聊天 jFrame String info1 new String 3 username userid userid2 are variables info1 0 username4 info1 1 u
  • 如何更改JsRender模板标签?

    我用树枝 它使用这些标签 name 我想将 JsRender 包含在我的项目中 但 JsRender 也使用相同的标签 name 所以存在冲突并且没有任何作用 如何使用自定义标签更改默认的 JsRender 标签 类似于 Ruby UPD
  • PyQT 布局之间的导航

    下面是我的应用程序代码 它允许您在窗口之间切换 该菜单有两个编程选项 例如 详细报告 和 所有公司 现在加载布局后 我不知道如何将按钮放在这两个视图中 以允许您将视图从 详细报告 更改为 全部 公司 反之亦然 你能帮助我吗 class Ap
  • Stackdriver 日志记录中不会创建任何日志

    在我的谷歌应用程序脚本中 我有 Logger log test 我什至尝试过 console log test 但即使我将项目 id 设置为 Google Cloud 项目 id 也不会打印到 stackdriver 日志中 屏幕显示 为了
  • .NET 中将 int 转换为位数组

    如何将 int 转换为位数组 如果我例如有一个值为 3 的 int 我想要一个长度为 8 的数组 如下所示 0 0 0 0 0 0 1 1 这些数字中的每一个都位于数组中大小为 8 的单独槽中 Use the BitArray class
  • MySQL 多数据库设置

    我已经寻找了这个问题的答案 我似乎能找到的只是一些问题 询问是使用多个数据库还是在单个数据库中使用多个表更好 但这不是我的问题 问题 1 我想在当前数据库旁边设置一个新数据库 但不知道如何操作 我想授予用户对 DB2 的完全管理员访问权限
  • VBA:检测用户窗体的任何文本框中的更改

    有一个用户表单有很多文本框 我需要检测每个文本框的更改 因此 我为表单中的每个文本框编写了一个子例程 结果是一大段代码 由于每个文本框的代码都是相同的 我想优化它 那么是否可以只编写一个子例程来检测表单的任何文本框中的更改 实现这一目标的唯
  • 在32位系统上安装64位glib2进行交叉编译

    我正在尝试在 32 位 ubuntu 系统上交叉编译 64 位可执行文件 这一直有效 直到链接为止 由于缺少 64 位 glib2 libglib 2 0 a 它失败了 如果我在 64 位系统上执行此操作 我会使用getlibs将 32 位
  • OpenJPA 合并/持久非常慢

    我在 WebSphere Application Server 8 上使用 OpenJPA 2 2 0 和 MySQL 5 0 DB 我有一个要合并到数据库中的对象列表 就像是 for Object ob list Long start C
  • Redis:插入元素在开头还是结尾时,ZADD 是否比 O(logN) 更好?

    雷迪斯文档对于 ZADD 来说 操作是 O logN 然而 有谁知道 ZADD 是否比 O logN 当插入的元素位于排序顺序的开头或结尾时 例如 对于某些实现 这可能是 O 1 具体来说 redistutorial指出 排序集是通过双端口