理论上来说,跳表和字典中的任意一个单独都可以用来实现zset,但是效率都比两者的结合来的低。例如,如果只使用字典实现,那么查找成员分值的时间复杂度是O(1)。但是,由于字典是无序的,如果想要执行某些范围操作,需要先对字典中所有的元素进行一次排序,然后再执行相应的操作。而排序至少需要O(NlongN)的时间复杂度,以及O(N)的空间复杂度。如果只使用跳表实现,虽然跳表执行范围操作的优点都可以被保留,但是根据成员查找分值的复杂度将上升为O(logN)。

    因此,为了让zset的查找和范围操作都尽可能快的执行,Redis采用了同时使用字典和跳表两种数据结构来实现。