• Redis数据类型-zSet基本使用


    在这里插入图片描述

    特性

    • 有序且不可重复的集合
    • 每个元素都会关联一个 double 类型的分数。正是通过分数来为集合中的成员进行从小到大的排序
      • 类似Java中的数据结构Map,其中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 为结果集的基数
  • 相关阅读:
    子查询+UNION+LIMIT
    VL600威锋typeC 转HDMI转接单芯片方案,支持DP1.4两LANE实现4K60,
    最大子序和
    21天打卡挑战学习MySQL——《容器部署MySQL》第三周 第八篇
    解决vite首次加载很慢的问题
    数字图像处理 使用C#进行图像处理九 实现傅里叶变换
    C++的extern关键字在HotSpot VM中的重要应用
    SpringBoot 前后端分离 实现验证码操作
    闭包
    web前端开发技术纯静态 (12306官网 1页)
  • 原文地址:https://blog.csdn.net/u011077966/article/details/126777872