在REDIS文档中,它声明对有序集合的插入和更新操作是O(log(n))。
在此question上,他们指定了有关基础数据结构的更多详细信息skip list。
然而,有一些特殊情况依赖于我不熟悉的REDIS实施。
非常欢迎任何见解。
答案 0 :(得分:2)
注意:一旦列表超过特定大小(max_ziplist_entries),将使用跳过列表,低于该大小使用的压缩列表。
重新。第一个问题 - 我认为它仍然是O(log(n)),因为跳过列表是一种二叉树的类型,所以不能保证头/尾节点在哪里
重新。第二个问题 - 根据消息来源,更改分数是通过删除和读取成员来实现的:https://github.com/antirez/redis/blob/209f266cc534471daa03501b2802f08e4fca4fe6/src/t_zset.c#L1233& https://github.com/antirez/redis/blob/209f266cc534471daa03501b2802f08e4fca4fe6/src/t_zset.c#L1272
答案 1 :(得分:0)
在“跳过列表”中,当您在头或尾插入新元素时,您仍需要更新O(log n)
级别。前一个头部或尾部可以具有O(log n)
级别,并且每个级别可能都有需要更新的指针。
已由@ itamar-haber回答