微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么Redis使用skiplist来实现zset

如何解决为什么Redis使用skiplist来实现zset

我研究了Redis的实现,知道skiplist后面有两个数据结构(ziplistzset)。我知道 skiplist 的一些基本思想(保持多个指针以更快地访问下一个元素,搜索的平均时间复杂度为 O(logN))。

我的问题是:
看了资料说Redis会用skiplist来实现zset有两种情况,第一:zset中成员多,第二:zset中成员长{{1 }}。

在这两种情况下使用string代替skiplist有什么好处,为什么这两种情况需要特殊处理?为什么我们不总是使用一种数据结构来实现 ziplist

解决方法

ziplist 的搜索和更新时间复杂度为 O(n),而skiplist 的时间复杂度为 O(logN)

ziplist 的唯一好处是内存使用。由于zip list采用线性内存地址实现,没有指向其他节点的指针,可以为Redis节省大量内存空间。

当zset中的成员很少时,O(N)和O(logN)不会有显着差异。但是内存使用会有很大的差异(假设你有 1m 个 zset 的键,每个 zset 只有 10 个成员)。

当zset中有很多成员时(比如1m),时间复杂度很重要,因为它会影响并发性能。

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