问题描述
为什么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 存储了两个索引?
是的,它有两个索引。键的哈希索引和分数的跳过列表索引。