Redis Zset 定位记录

问题描述

为什么redis可以通过score和key在log(n)时间内定位zset中的一条记录? redis 是否真的为一个 zset 存储了两个索引?

我想如果我们有一个通过键确定记录的跳过列表,我们只能通过这个键来索引。

SkipNode
   key
     k1  #value
     k2  #score


  |------------------------------>   |
  |-...                              |
  |------------->|-------...---------|
skipNode1 -> skipNode2 -> ... skipNodeN

我们只能通过key来定位一条记录,在最左边,(k1,k2),顺序,我们如何只通过k2索引一条记录?

解决方法

为什么redis可以同时通过score和key在log(n)时间内定位zset中的一条记录?Z

key 搜索的时间复杂度为 O(1),by score 为 O(log(n))。

redis 是否真的为一个 zset 存储了两个索引?

是的,它有两个索引。键的哈希索引和分数的跳过列表索引。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...