Redis系列-存储篇sorted set主要操作函数小结

redis支持有序集合,即sorted set。sorted set在set的基础上,增加了排序属性,是set的升级版。这里简要谈谈sorted set的常用函数:

1)insert

a)zadd

语法:zadd key score member [[score member] [score member] ...]

解释:增加一个或多个member【根据score排序】到有序集key中,如果member已经存在,只更新score。返回增加member个数,不包含已经存在的member

[root@xsf001 ~]# redis-cli
redis 127.0.0.1:6379> ZADD score 230 zhangsan
(integer) 1
redis 127.0.0.1:6379> zadd score 240 lisi 250 wangwu
(integer) 2
redis 127.0.0.1:6379> zadd score 100 liuli
redis 127.0.0.1:6379> zadd score 249 wangwu
(integer) 0 注意:有些redis版本,只能一次添加一个member

2)select

a)zrange

语法:zrange key start stop [withscores]

解释:返回有续集key中指定范围【通过索引 start stop】的member[及其score];

redis 127.0.0.1:6379> zrange score 0 -1  #所有元素
1) "liuli"
2) "zhangsan"
3) "lisi"
4) "wangwu"
redis 127.0.0.1:6379> zrange score 0 -1 withscores #所有member及score
1) "liuli"
2) "100"
3) "zhangsan"
4) "230"
5) "lisi"
6) "240"
7) "wangwu"
8) "249"
redis 127.0.0.1:6379> zrange score 0 2 withscores #前三个元素
1) "liuli"
2) "100"
3) "zhangsan"
4) "230"
5) "lisi"
6) "240"
redis 127.0.0.1:6379> zrange score 0 -2 #第一个元素到
1) "liuli"
2) "zhangsan"
3) "lisi" 注意:0,表示第一个元素,-1 表示最后一个元素,-2 表示倒数第二个元素

b)zcount

语法:zcount key min max

解释:统计key中score值介于min 和max之间的member个数

redis 127.0.0.1:6379> zrange score 0 -1 withscores
1) "liuli"
2) "100"
3) "zhangsan"
4) "230"
5) "lisi"
6) "240"
7) "wangwu"
8) "249"
redis 127.0.0.1:6379> zcount score 230 240 # count(score >=230 && score <=240)
(integer) 2

c) zscore

语法:zscore key member

解释:返回有续集key中member的score

redis 127.0.0.1:6379> zscore score liuli
"100"

d)zrevrange

语法:zrevrange key start stop [withscores]

解释:返回有续集key中指定范围[通过索引start stop]的member[及score],返回member根据score按降序排列

redis 127.0.0.1:6379> zrevrange score 0 -1 withscores
1) "wangwu"
2) "249"
3) "lisi"
4) "240"
5) "zhangsan"
6) "230"
7) "liuli"
8) "100"
redis 127.0.0.1:6379> zrevrange score 1 -2
1) "lisi"
2) "zhangsan" 注意:索引0 表示第一个元素,-1 最后一个元素,-2 倒数第二个元素;依次类推

e)zrangebyscore

语法:zrangebyscore key min max [withscores] [limit offset count]

解释:返回有续集key中,score大于等于min并且小于等于max的member。返回结果按照score递增的次序排列。可选withscores决定返回结果集中仅仅返回member还是返回member和score;可选参数limit 指定返回结果的数量区间。

redis 127.0.0.1:6379> zrangebyscore score 100 10000 withscores
1) "liuli"
2) "100"
3) "zhangsan"
4) "230"
5) "lisi"
6) "240"
7) "wangwu"
8) "249"
redis 127.0.0.1:6379> zrangebyscore score 100 10000 limit 1 3
1) "zhangsan"
2) "lisi"
3) "wangwu"

f)zrevrangebyscore

语法:zrevrangescore key max min [withscores] [limit offset count]

解释:返回有续集key中score<=max并且score>=min 的元素,返回结果根据score从大到小顺序排列。可选参数withscores决定结果集中是否包含score,可选参数limit 指定返回结果集范围。

redis 127.0.0.1:6379> zrevrangebyscore score 0 10000
(empty list or set)
redis 127.0.0.1:6379> zrevrangebyscore score 10000 0
1) "wangwu"
2) "lisi"
3) "zhangsan"
4) "liuli"
redis 127.0.0.1:6379> zrevrangebyscore score 10000 0 withscores limit 0, 2
1) "wangwu"
2) "249"
3) "lisi"
4) "240" 注意:max在min之前

g)zrank

语法:zrank key member

解释:根据score从低到高,返回member在有续集中的index

redis 127.0.0.1:6379> zrange score 0 -1
1) "liuli"
2) "zhangsan"
3) "lisi"
4) "wangwu"
redis 127.0.0.1:6379> zrank score liuli
(integer) 0
redis 127.0.0.1:6379> zrank score wangwu
(integer) 3

h)zrevrank

语法:zrevrank key member

解释:根据score从高到低排序,返回member在有序集key中的index

redis 127.0.0.1:6379> zrange score 0 -1
1) "liuli"
2) "zhangsan"
3) "lisi"
4) "wangwu"
redis 127.0.0.1:6379> zrevrank score liuli
(integer) 3
redis 127.0.0.1:6379> zrevrank score wangwu
(integer) 0

i)zcard

语法:zcard key

解释:返回有续集key的基数

redis 127.0.0.1:6379> zcard score
(integer) 4
redis 127.0.0.1:6379> zcard stdu #有续集不存在返回0
(integer) 0

3)update

a)zincrby

语法:zincrby key increment member

解释:有续集key的member增加增量increment,返回增加后的score

redis 127.0.0.1:6379> zscore score liuli
"100"
redis 127.0.0.1:6379> zincrby score 300 liuli
"400"
redis 127.0.0.1:6379> zscore score liuli
"400"
redis 127.0.0.1:6379> <span style="font-family:Arial, Helvetica, sans-serif;">zincrby </span>score 500 xie
"500"
注意:如果member在key中不存在,则新增个member

4)delete

a)zrem

语法:zrem key member [member ...]

解释:移除有续集中的一个或多个member,返回移除member的个数

redis 127.0.0.1:6379> zrange score 0 -1
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "liuli"
5) "xie"
redis 127.0.0.1:6379> zrem score xie wwww #www不存在
(integer) 1
redis 127.0.0.1:6379> zrange score 0 -1
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "liuli" 注意:如果member不存在,则忽略

b)zremrangebyrank

语法:zremrangebyrank key start stop

解释:移除有续集中指定排名范围【start stop】的元素,返回移除元素个数

redis 127.0.0.1:6379> zrange score 0 -1
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "liuli"
redis 127.0.0.1:6379> zremrangebyrank score 0 1
(integer) 2
redis 127.0.0.1:6379> zrange score 0 -1
1) "wangwu"
2) "liuli" 注意:如果stop在start之前,则移除0个

c)zremrangebyscore

语法:zremrangebyscore key min max

解释:移除有续集中的member,移除member的score大于等于min小于等于max;返回移除元素个数

redis 127.0.0.1:6379> zrange score 0 -1 withscores
1) "wangwu"
2) "249"
3) "liuli"
4) "400"
redis 127.0.0.1:6379> zremrangebyscore score 248 250
(integer) 1
redis 127.0.0.1:6379> zrange score 0 -1 withscores
1) "liuli"
2) "400"

5)其他

a)zinterstore

语法:zinterstore destination numkeys  key[key...] [weights weight] [aggregate sum|min|max]

解释:统计多个有续集的交集,其中有续集key的个数必须以numkeys参数指定,并将统计结果存储到destination。默认情况下,destination中元素的score是各个有续集key中元素的score之和。使用weights为每个有续集指定个乘法因子,每个有续集的score在传递给集合函数(aggregate)之前,先乘以乘法因子。如果没指定乘法因子weight,默认是1;使用aggregate选项指定交集的聚合方式。min,最小score,max,最大score,sum,求和。

redis 127.0.0.1:6379> zrange score 0 -1 withscores
1) "lisi"
2) "20"
3) "liuli"
4) "400"
redis 127.0.0.1:6379> zrange score1 0 -1 withscores
1) "wangwu"
2) "20"
3) "liuli"
4) "30"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 #交集求和 sum(score.member.score * 1 + score1.member.score * 1)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "430"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 weights 1 2 #交集求和,sum(score.member.score * 1 + score1.member.score * 2)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "460"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate min #交集求最小值,min(score.member.score * 1 , score1.member.score * 1)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "30"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate max #交集求最大值 max(score.member.score * 1 , score1.member.score * 1)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "400"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate sum #交集求和,sum(score.member.score * 1 , score1.member.score * 1)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "430"
redis 127.0.0.1:6379> zinterstore dest 2 score score1 weights 1 2 aggregate min #交集求最小值 min(score.member.score * 1 , score1.member.score * 2)
(integer) 1
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "liuli"
2) "60"

b)zunionstore

语法:zunionstore destination numkeys  key[key...] [weights weight] [aggregate sum|min|max]

解释:统计多个有续集的并集,其中有续集key的个数必须以numkeys参数指定,并将统计结果存储到destination。。默认情况下,destination中元素的score是各个有续集key中元素的score之和。weights指定乘法因子,aggregate指定聚合方式,详情,请参阅 zinterstore 中介绍

redis 127.0.0.1:6379> zrange score 0 -1 withscores
1) "lisi"
2) "20"
3) "liuli"
4) "400"
redis 127.0.0.1:6379> zrange score1 0 -1 withscores
1) "wangwu"
2) "20"
3) "liuli"
4) "30"
redis 127.0.0.1:6379> zunionstore dest 2 score score1 #交集求和 sum(score.member.score * 1 , score1.member.score * 1)
(integer) 3
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "lisi"
2) "20"
3) "wangwu"
4) "20"
5) "liuli"
6) "430"
redis 127.0.0.1:6379> zunionstore dest 2 score score1 weights 1 2 aggregate sum #交集求和 sum(score.member.score * 1 , score1.member.score * 2)
(integer) 3
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "lisi"
2) "20"
3) "wangwu"
4) "40"
5) "liuli"
6) "460"
redis 127.0.0.1:6379> zunionstore dest 2 score score1 weights 1 2 aggregate max #交集最大值 max(score.member.score * 1 , score1.member.score * 2)
(integer) 3
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "lisi"
2) "20"
3) "wangwu"
4) "40"
5) "liuli"
6) "400"
redis 127.0.0.1:6379> zunionstore dest 2 score score1 weights 2 4 aggregate min #交集最小值 min(score.member.score * 2 , score1.member.score * 4)
(integer) 3
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
1) "lisi"
2) "40"
3) "wangwu"
4) "80"
5) "liuli"
6) "120"

提醒:sorted set的所有函数,请用下面方式查看

[root@xsf001 ~]# redis-cli
redis 127.0.0.1:6379> help @sorted_set

Redis系列-存储篇sorted set主要操作命令的更多相关文章

  1. Redis系列-存储篇sorted set主要操作函数小结

    redis支持有序集合,即sorted set.sorted set在set的基础上,增加了排序属性,是set的升级版.这里简要谈谈sorted set的常用函数: 1)insert a)  zadd ...

  2. Redis系列-存储篇string主要操作命令

    Redis系列-存储篇string主要操作命令 通过上两篇的介绍,我们的redis服务器基本跑起来.db都具有最基本的CRUD功能,我们沿着这个脉络,开始学习redis丰富的数据结构之旅,当然先从最简 ...

  3. Redis系列-存储篇list主要操作命令

    Redis系列-存储篇list主要操作命令小结 在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素 ...

  4. Redis系列-存储篇hash主要操作函数小结

    阳光透过玻璃,洒在身上,一杯暖茶在手,说不尽的安逸自得,让我有种想再写篇blog的冲动.上篇主要谈了string,这里谈谈hash吧!hash是一些列key value(field value)的映射 ...

  5. Redis系列-存储篇string主要操作函数小结

    通过上两篇的介绍,我们的redis服务器基本跑起来.db都具有最基本的CRUD功能,我们沿着这个脉络,开始学习redis丰富的数据结构之旅,当然先从最简单且常用的string开始. 1.新增 a)se ...

  6. Redis系列-存储篇set主要操作函数小结

    最近,总是以“太忙“为借口,很久没有blog了,凡事贵在恒,希望我能够坚持不懈,毕竟在blog的时候,也能提升自己.废话不说了,直奔主题”set“ redis set 是string类型对象的无序集合 ...

  7. Redis系列-存储篇list主要操作函数小结

    在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素:列表最左端第一个元素. 表尾元素:列表最右端的 ...

  8. Redis系列-存储篇list主要操作函数小结(转)

    在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素:列表最左端第一个元素. 表尾元素:列表最右端的 ...

  9. Redis系列-存储hash主要操作命令

    Redis系列-存储篇hash主要操作函数小结 hash是一些列key value(field value)的映射表.常常用其存储一些对象实例.相对于把一个对象的各个字段存储为string,存储为ha ...

随机推荐

  1. Python module all in one

    Python module all in one Python Modules https://docs.python.org/3/tutorial/modules.html Fibonacc # F ...

  2. Java基础篇(04):日期与时间API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.时间和日期 在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作用,例如同一个时间节点下的数据生成,基于时间范围的各种数据统计和分 ...

  3. yaml配置和ini配置的数据源配置和数据获取

    1.前言 关于yaml和ini的相关理论暂不做记录,不影响代码编写,百度即可. 2.关于配置文件的选择 yaml 和 ini 都使用过, 但是yaml更符合人类使用,已要弃用ini,后期各项目均采用y ...

  4. JDK源码阅读-Reference

    本文转载自JDK源码阅读-Reference 导语 Java最初只有普通的强引用,只有对象存在引用,则对象就不会被回收,即使内存不足,也是如此,JVM会爆出OOME,也不会去回收存在引用的对象. 如果 ...

  5. Apache支持Vue router使用 HTML5History 模式

    一.前言 前端Vue router 使用history模式,URL会比hash模式好看,这种模式要玩好,还需要后端配置支持,否则会报404错误. 注:1.前端代码省略. 2.此处后台使用Apache服 ...

  6. Bitter.NotifyOpenPaltform : HTTP 异步消息接收调度中心--开源贡献 之 一:简介

    现在互联网的系统越来越趋向于复杂,从单体系统到现在的微服务体系演变.公司与公司的分工也越来越明确. 大数据公司提供了大数据服务 人脸识别公司提供了人脸识别服务 OCR 公司提供了专业的OCR 服务 车 ...

  7. JUnit5学习之六:参数化测试(Parameterized Tests)基础

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. gRPC-go源码(2):ClientConn

    摘要 在上一篇文章中,我们聊了聊gRPC是怎么管理一条从Client到Server的连接的. 我们聊到了gRPC拥有Resolver,用来解析地址:拥有Balancer,用来做负载均衡. 在这一篇文章 ...

  9. 基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...

  10. MySql学习---数据库基本类型,事务,多表查询

    数据库分类 关系型数据库 行列, 列如Mysql,oracle 通过表和表之间,行和列之间的关系进行数据的存储 非关系型数据库: Redis,MongDb 以对象存储,同过对象的自身属性来决定 表与表 ...