Bootstrap

Redis数据类型-zSet基本使用

在这里插入图片描述

特性

  • 有序且不可重复的集合
  • 每个元素都会关联一个 double 类型的分数。正是通过分数来为集合中的成员进行从小到大的排序
    • 类似Java中的数据结构Map<String,Double>,其中Double类型就是给每个value元素赋予一个score(权重)
  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
  • 一个集合可以存储 2 ^ 32 - 1 个元素(4,294,967,295);
  • zSet有两种数据类型作为底层存储:
    • zskiplist + dictht
      • skiplist 编码的 Zset 底层为一个被称为 zset 的结构体,这个结构体中包含一个字典和一个跳跃表。跳跃表按 score 从小到大保存所有集合元素,查找时间复杂度为平均 O(logN)O(logN),最坏 O(N)O(N) 。字典则保存着从 member 到 score 的映射,这样就可以用 O(1)的复杂度来查找 member 对应的 score 值。虽然同时使用两种结构,但它们会通过指针来共享相同元素的 member 和 score,因此不会浪费额外的内存。
    • ziplist
      • ziplist 编码的 Zset 使用紧挨在一起的压缩列表节点来保存,第一个节点保存 member,第二个保存 score。zipli
;