Redis中ZSet数据类型的常见命令

一.基本介绍:

1.区分Set和ZSet:

①:Set 无序无重复;

②:ZSet 带分值有序无重复。(无重复指的是member)

2.ZSet的排序规则:给ZSet中的member同时引入一个分数属性(score),为浮点类型,每个member对应一个分数,按照分数大小排序

注:ZSet中的member仍要求唯一:分数可重复

二:ZSet常见命令:

①: zadd 命令: 增添元素

语法: zadd key NX \| XX GT \| LT CH INCR score member member... 返回新增成功元素个数

例:zadd key 10 zhangsan 20 lisi 30 wangwu --->10 zhangsan,20 lisi,30 wangwu

下标: 0 , 1 , 2

参数解析:

<1> NX: 仅添加新元素,不更新已存在的元素(不存在就添加,已存在的 member 不修改 score)

<2> XX: 仅更新已存在的元素,不添加新元素(只修改已存在的 member 的 score,不存在的不添加)

<3> CH: 加了这个参数则会返回多个本次更新的元素个数

<4> INCR:递增

②: zcard 命令:获取ZSet中的元素个数

语法: zcard key -->返回元素个数

③: zcount 命令: 返回分数在mix和max间的元素个数,前后均为闭区间

语法: zcount key min max -->返回区间元素个数

特殊(开区间):zcount key (95 (97 -->统计分数大于 95、小于 97 的member

④: zrange 命令: 返回指定区间内的所有元素(升序)

语法: zrange key start stop withscores -->升序返回指定区间内的所有元素

参数: <1> withscores:加它后元素带分数一起返回

⑤:zrevrange 命令: 按分数降序遍历

语法: zrevrange key start stop withscores -->降序返回指定区间内的所有元素

⑥: zrangebycore 命令: 按分数找区间内所有元素

语法: zrangebycore key min max withscores -->返回区间内所有元素

⑦: zpopmax 命令:删除并返回分数最高的count个元素

语法: zpopmax key count -->列表形式返回弹出分数最高的 count个 member + 它的 score

⑧: bzpopmax 命令: 加阻塞功能的zpopmax命令

语法: bzpopmax key key... timeout -->拿到元素正常返回,没有则返回nil

⑨: zpopmin 命令: 删除并返回分数最低的count个元素

语法: zpopmin key count --->表形式返回弹出分数最低的 count个 member + 它的 score

⑩:bzpopmin 命令:加阻塞功能的zpopmin 命令

语法:bzpopmin key key... timeout -->拿到元素正常返回,没有则返回nil

⑪:zrank 命令: 在升序下返回指定元素的排名(下标)

语法: zrank key member

例:zrank key zhangsan -->返回0

⑫: zrevrank 命令: 在降序下返回指定元素的下标

语法: zrevrank key member

⑬:zscore 命令:查询元素分数

语法: zscore key member -->返回元素分数

⑭:zrem 命令:删除指定元素

语法: zrem key member member... --->返回成功删除的元素个数

⑮: zremrangebyrank命令: 按照升序删除指定范围内的所有元素

语法: zremrangebyrank key start stop --->返回删除元素个数

⑯: zremrangebyscore 命令 :删除指定分数范围内的所有元素

语法:zremrangebyscore key min max -->返回删除元素个数

⑰:zincrby 命令: 为指定元素的关联分数添加指定分数值(可加小数)

语法: zincrby key increment member --->返回修改后的分数

⑱:集合间操作(交集,并集,差集):

1` zinterstore命令: 求交集,结果保存到第三方key中

语法: zinterstore destination_key numbers key1 key2... WEIGHTS weight1 \[weight2...]AGGREGATE sum\|min\|max

参数: <1> WEIGHTS:权重

<2> AGGREGATE: 计算交集时针对相同分数如何计算(sum求和,min取最小,max取最大)

2`zunionstore 命令:求并集

语法: zunionstore destination_key numkeys key key... WEIGHTS weight1 \[weight2...]AGGREGATE sum\|min\|max

三.ZSet命令小结:

1`zadd 2`zcard 3`zcount 4`zrange 5`zrevrange 6`zrangebycore 7`zpopmax 8`bzpopmax 9`zpopmin 10`bzpopmin 11`zrank 12`zrevrank 13`zscore 14`zrem 15`zremrangebyrank 16`zremrangebyscore 17`zincrby 18`zinterstore 19`zunionstore

四.ZSet内部编码方式:(可用object encoding key命令来查看)

①:ziplist:若有序集合元素较少或单个元素体积较小,则用ziplist(压缩列表)来存储

②:skiplist:反之用skiplist(跳表)来存储

五.ZSet应用场景:

①:排行:<1>微博热搜

<2>游戏天梯排行

<3>成绩排行

⭐扩展-单位换算(张口就来):1`thousand--->KB

2`million --->MB

3`billion --->GB 如:12亿用户ID-->需要1.2GB内存来存

相关推荐
MonolithIoT10 分钟前
实战方案|设备备件无人值守仓库:连续化产线运维备件 7×24 小时数字化管控方案
运维·网络·数据库
瞬间&永恒~33 分钟前
【MySQL】4-6:在同一个主机上使用 systemd 运行多个 MySQL服务器
服务器·数据库·mysql
心机之蛙qee44 分钟前
Redis的主从、哨兵及集群
数据库·redis·缓存
gwf2161 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
AAA@峥2 小时前
CentOS7 源码编译安装 MySQL5.7|SQL 基础操作 + 备份恢复完整实战
运维·数据库·sql·centos
xixingzhe22 小时前
spring ai简单使用skills
数据库·人工智能·spring
Fu2067212 小时前
数据库第三次作业
数据库
qq_297574673 小时前
RuoYi框架二次开发系列(五)性能优化、Redis缓存实战、分布式部署、接口限流与安全加固生产方案
redis·缓存·性能优化
AI多Agent协作实战派3 小时前
AI多Agent协作系统实战(二十三):Agent读HEARTBEAT.md不读AGENTS.md——openclaw的文件加载之谜
前端·数据库·人工智能·uni-app
jun_bai3 小时前
postgresql数据库免安装版安装到windows系统
数据库·postgresql