Redis 排序集插入的时间复杂度

Time Complexity of Redis sorted set insertion

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

抱歉,如果我在这里遗漏了一个基本的东西。

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

你可以通过使用你的分数总是减少而不是(乘以 -1)来欺骗这个,这样你将只遍历最低分数边缘的所有级别。有 64 个级别的顶部(ZSKIPLIST_MAXLEVEL = 64),因此你在你的情况下得到 O(1) 插入(恒定时间)。

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