Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么Redis使用skiplist实现zset_C++_Data Structures_Redis - Fatal编程技术网

C++ 为什么Redis使用skiplist实现zset

C++ 为什么Redis使用skiplist实现zset,c++,data-structures,redis,C++,Data Structures,Redis,我研究了Redis的实现,我知道在zset后面有两种数据结构(skiplist和ziplist)。我知道skiplist的一些基本概念(保持多个指针更快地访问下一个元素,搜索的平均时间复杂度为O(logN)) 我的问题是: 我读到的信息说,Redis将使用skiplist实现zset,有两种情况,第一种情况是zset中有很多成员,第二种情况是zset中的成员长字符串 在这两种情况下使用skiplist而不是ziplist有什么好处,为什么这两种情况需要特殊处理?为什么我们不总是使用一个数据结构来

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

我的问题是:
我读到的信息说,Redis将使用
skiplist
实现
zset
,有两种情况,第一种情况是zset中有很多成员,第二种情况是
zset
中的成员长
字符串

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

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

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

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

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

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

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

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

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