【问题标题】:Time Complexity of Redis sorted set insertionRedis有序集插入的时间复杂度
【发布时间】:2020-04-01 20:07:39
【问题描述】:

Redis sorted set插入的时间复杂度是O(log n),我假设是由于在skip list中插入了数据(为了保持Set Order)。但是如果我要插入的数据总是以递增的顺序得分,它仍然是 O(log N) 吗?我猜他们应该有一个指向跳过列表尾部的简单指针,它可以在 O(1) 中进行插入。

对不起,如果我在这里遗漏了一些基本的东西。

【问题讨论】:

  • 您似乎建议对您的用例进行优化,但一般的跳过列表实现并不像那样工作

标签: redis redis-cluster skip-lists


【解决方案1】:

跳过列表使用随机级别创建。如果您的插入总是分数增加,它将遍历完整的顶层,然后一直到最高分边界的所有级别,包括底层(如从楼梯上掉下来)。所以,是的,你的插入总是 O(log N)。

您可以通过使用始终递减的分数(乘以 -1)来欺骗这一点,这样您将只遍历最低分数边缘的所有级别。有 64 个级别的顶部 (ZSKIPLIST_MAXLEVEL = 64),因此在您的情况下您会得到 O(1) 次插入(恒定时间)。

看看 Redis Streams,它总是强制增加 id。您不能修改元素,但可以存储对存储元素可修改部分的键的引用。有可能它更适合你。它在内部使用基数树。

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 2013-11-18
    • 2011-09-01
    • 2013-06-06
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多