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。ziplist 内的集合元素按 score 从小到大排序,其实质是一个双向链表。虽然元素是按 score 有序排序的, 但对 ziplist 的节点指针只能线性地移动,所以在 REDIS_ENCODING_ZIPLIST 编码的 Zset 中, 查找某个给定元素的复杂度为 O(N)。
      • ziplist 详细介绍

在这里插入图片描述

使用场景

  1. 热点话题、新闻等各种类型的排行榜
  2. 延迟队列
  3. 分布式定时器
  4. 时间窗口限流

命令使用

命令说明时间复杂度
ZADD key score member [[score member] [score member] …]将一个或多个 member 元素及其 score 值加入到有序集 key 当中O(M*log(N)), N 是有序集的基数, M 为成功添加的新成员的数量
ZCARD key返回有序集 key 的基数O(1)
ZCOUNT key min max返回有序集 key 中, score 值在 minmax 之间(默认包括 score 值等于 minmax )的成员的数量O(log(N)+M), N 为有序集的基数, M 为值在 minmax 之间的元素的数量
ZCOUNT key min max返回有序集 key 中, score 值在 minmax 之间(默认包括 score 值等于 minmax )的成员的数量O(log(N)+M), N 为有序集的基数, M 为值在 minmax 之间的元素的数量
ZINCRBY key increment member为有序集 key 的成员 memberscore 值加上增量 incrementO(log(N))
ZRANGE key start stop [WITHSCORES]返回有序集 key 中,指定区间内的成员O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]返回有序集 key 中,所有 score 值介于 minmax 之间(包括等于 minmax )的成员。有序集成员按 score 值递增(从小到大)次序排列O(log(N)+M), N 为有序集的基数, M 为被结果集的基数
ZRANK key member返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列O(log(N))
ZREM key member [member …]移除有序集 key 中的一个或多个成员,不存在的成员将被忽略O(M*log(N)), N 为有序集的基数, M 为被成功移除的成员的数量
ZREMRANGEBYRANK key start stop移除有序集 key 中,指定排名(rank)区间内的所有成员O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量
ZREMRANGEBYSCORE key min max移除有序集 key 中,所有 score 值介于 minmax 之间(包括等于 minmax )的成员O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量
ZREVRANGE key start stop [WITHSCORES]返回有序集 key 中,指定区间内的成员O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]返回有序集 key 中, score 值介于 maxmin 之间(默认包括等于 maxmin )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列O(log(N)+M), N 为有序集的基数, M 为结果集的基数
ZREVRANK key member返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序O(log(N))
ZSCORE key member返回有序集 key 中,成员 memberscoreO(1)
ZUNIONSTORE destination numkeys key计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destinationO(N)+O(M log(M)), N 为给定有序集基数的总和, M 为结果集的基数
ZINTERSTORE destination numkeys key计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destinationO(NK)+O(Mlog(M)), N 为给定 key 中基数最小的有序集, K 为给定有序集的数量, M 为结果集的基数
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值