如何解决为什么Redis使用skiplist来实现zset
我研究了Redis的实现,知道skiplist
后面有两个数据结构(ziplist
和zset
)。我知道 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 举报,一经查实,本站将立刻删除。