🗒️redis 中 ZSet的范围查询的时间复杂度是多少
2024-8-3
| 2024-9-10
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
我觉得要说明 ZSet 的范围查询的时间复杂度是多少,需要根据 zset 的底层结构来说明。redis 数据类型和底层数据结构的对应关系
Redis的配置文件中关于有序集合底层实现的两个配置。
  1. zset-max-ziplist-entries 128:zset 采用压缩列表时,元素个数最大值。默认值为 128。
  1. zset-max-ziplist-value 64:zset 采用压缩列表时,每个元素的字符串长度最大值。默认值为 64。
当满足以下任一条件时,Redis 便会将 zset 的底层实现由压缩列表转为跳跃表。
  1. zset中元素个数大于zset_max_ziplist_entries
  1. 插入元素的字符串长度大于zset_max_ziplist_value
  1. 压缩列表(ziplist)
      • Redis 在某些情况下会使用压缩列表来存储 ZSet,特别是在元素数量较少且每个元素都很小的时候。
      • 压缩列表是一种紧凑的数据结构,它通过顺序扫描来查找和操作数据。
      • 因此,对于范围查询操作,如 ZRANGEBYSCOREZRANGEBYLEX,其时间复杂度为 ,其中 是匹配范围内的元素数量。
  1. 跳表(skiplist)
      • 当 ZSet 中的元素数量较多或单个元素比较大时,Redis 会使用跳表来实现有序集合。
      • 跳表是一种分层链表,可以在平均 时间内进行插入、删除和查找操作,其中 是集合中的总元素数。
      • 对于范围查询操作,如 ZRANGEBYSCOREZRANGEBYLEX,其时间复杂度为 ,其中 :用于定位起始点的位置, :是匹配范围内的元素数量
总结来说:
  • 使用压缩列表时:范围查询复杂度为
  • 使用跳表时:范围查询复杂度为
  • Redis
  • AOF (Append Only File)日志  Redis 中单线程的理解
    Loading...
    目录