码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Redis——》数据类型:zset(有序集合)


    推荐链接:
        总结——》【Java】
        总结——》【Mysql】
        总结——》【Redis】
        总结——》【Spring】
        总结——》【SpringBoot】
        总结——》【MyBatis、MyBatis-Plus】


    相关链接:
        Redis——》数据类型
        Redis——》数据类型:string(字符串)
        Redis——》数据类型:hash(哈希)
        Redis——》数据类型:list(列表)
        Redis——》数据类型:set(集合)
        Redis——》数据类型:zset(有序集合)
        Redis——》数据类型:bitmap

    Redis——》数据类型:zset(有序集合)

    • 一、简介
    • 二、应用场景
    • 三、底层结构
    • 四、操作示例
      • (1)增
      • (2)删
      • (3)改
      • (4)查
      • (5)计算
    • 五、排序是怎么实现的?

    一、简介

    已排序的字符串集合,同时元素不能重复
    每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
    有序集合的成员是唯一的,但分数(score)却可以重复。
    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
    集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

    二、应用场景

    排行榜,社交需求(如用户点赞)

    三、底层结构

    ziplist(压缩列表)、skiplist(跳跃表)

    四、操作示例

    (1)增

    语法示例描述
    zadd key score1 member1 [score2 member2]zadd k1 1 a 2 b向有序集合添加一个或多个成员,或者更新已存在成员的分数

    (2)删

    语法示例描述
    zrem key member [member …]zrem k1 a b移除有序集合中的一个或多个成员
    zremrangebylex key min maxzremrangebylex k1 0 1移除有序集合中给定的字典区间的所有成员
    zremrangebyrank key start stopzremrangebyrank k1 0 1移除有序集合中给定的排名区间的所有成员
    zremrangebyscore key min maxzremrangebyscore k1 0 10移除有序集合中给定的分数区间的所有成员

    (3)改

    见增

    (4)查

    语法示例描述
    zcard keyzcard k1获取有序集合的成员数
    zrange key start stop [WITHSCORES]zrange k1 0 1通过索引区间返回有序集合成指定区间内的成员
    zrangebylex key min max [LIMIT offset count]zrangebylex k1 0 1通过字典区间返回有序集合的成员
    zrangebyscore key min max [WITHSCORES] [LIMIT]zrangebyscore k1 0 10通过分数返回有序集合指定区间内的成员
    zrank key memberzrank k1 a返回有序集合中指定成员的索引
    zrevrange key memberzrevrange k1 a返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
    zscore key memberzscore k1 a返回有序集中,成员的分数值
    zrevrange key start stop [WITHSCORES]zrevrange k1 0 1返回有序集中指定区间内的成员,通过索引,分数从高到底
    zrevrangebyscore key max min [WITHSCORES]zrevrangebyscore k1 0 10返回有序集中指定分数区间内的成员,分数从高到低排序
    zscan key cursor [MATCH pattern] [COUNT count]zscan k1 cursor迭代有序集合中的元素(包括元素成员和元素分值)

    (5)计算

    语法示例描述
    zcount key min maxzcount k1 0 10计算在有序集合中指定区间分数的成员数
    zincrby key increment memberzincrby k1 1 a有序集合中对指定成员的分数加上增量 increment
    zinterstore destination numkeys key [key …]zinterstore destkey k1 k2计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
    zlexcount key min maxzlexcount k1 0 10在有序集合中计算指定字典区间内成员数量
    zunionstore destination numkeys key [key …]zunionstore destkey k1 k2计算给定的一个或多个有序集的并集,并存储在新的 key 中
    help @zset
    
    # zadd key score member
    zadd k1 8 apple 2 banana 3 orange
    
    # 分值排序,按索引查询
    zrange k1 0 -1
    # 分值排序,按索引查询
    zrange k1 0 -1 with sroce
    
    # 分值排序,按分值查询
    zrangebyscore k1 3 8
    
    # 分值排序,从小到大取前2个
    zrange k1 0 1
    
    # 分值排序,从大到小取前2个
    zrerange k1 0 1
    
    # 通过元素取出分值
    zscore k1 apple
    
    # 通过元素取出排名
    zrank k1 apple
    
    # 元素增加分值
    zincrby k1 2.5 banana
    
    # 歌曲排行榜(下载、点击、播放)
    
    
    
    zadd k1 80 tom 60 sean 70 baby
    zadd k2 60 tom 100 sean 40 yiming
    
    # 相同元素默认相加
    zunionstore unkey 2 k1 k2
    zrange unkey 0 -1 withscores
    
    # k1权重为1,k2权重为0.5
    zunionstore unkey 2 k1 k2 weights 1 0.5
    zrange unkey 0 -1 withscores
    
    # 相同元素取最大值
    zunionstore unkey 2 k1 k2 aggregate max
    zrange unkey 0 -1 withscores
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    五、排序是怎么实现的?

    在这里插入图片描述

  • 相关阅读:
    volatile 关键字有什么用?它的实现原理是什么?
    京东大型API网关实践之路
    测试用例逻辑梳理
    蓝桥楼赛第30期-Python模块大比拼-第一天赛题 题解
    mplfinance 一个堪称完美python量化金融可视化工具详析
    网络服务ftp实验
    mysql之行锁和表锁篇
    【神印王座】两位新老婆登场!龙皓晨神勇救美,采儿却大发醋意!
    $nextTick 原理及作用
    1000 + Java 面试题,26,Javaweb基础知识点
  • 原文地址:https://blog.csdn.net/weixin_43453386/article/details/128105724
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号