Redis之有序集合命令
Redis 有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)
使用场景 : 排行榜
zadd : 将一个或多个成员及成绩加入有序集合,如果有分数则更新,分数可以是整型或者双精度浮点,返回新增的成员数,已存在的不算,返回新增成员数
xx 仅仅更新存在的成员,不添加新成员
nx 不更新存在的成员,只新增成员
incr 对成员进行递增操作(zincrby) 返回递增后的值
ch 返回改变的成员数(原始只返回新增成员数)
> zadd yhq 100 yhq 99 qhh 98 yjz 97 zhw
(integer) 4 #新增
> zadd yhq 101 qhh
(integer) 0 #修改
> zrange yhq 0 -1 withscores
1) "zhw"
2) 97.0
3) "yjz"
4) 98.0
5) "yhq"
6) 100.0
7) "qhh"
8) 102.0
> zadd yhq xx 666 yhq 777 ldy
(integer) 0 #仅更新
> zrange yhq 0 -1 withscores
1) "zhw"
2) 97.0
3) "yjz"
4) 98.0
5) "qhh"
6) 102.0
7) "yhq"
8) 666.0
> zadd yhq nx 555 yhq 777 ldy
(integer) 1 #仅新增
> zrange yhq 0 -1 withscores
1) "zhw"
2) 97.0
3) "yjz"
4) 98.0
5) "qhh"
6) 102.0
7) "yhq"
8) 666.0
9) "ldy"
10) 777.0
> zadd yhq incr 666 yhq
(integer) 1332 #递增,返回递增值
> zrange yhq 0 -1 withscores
1) "zhw"
2) 97.0
3) "yjz"
4) 98.0
5) "qhh"
6) 102.0
7) "ldy"
8) 777.0
9) "yhq"
10) 1332.0
> zadd yhq ch 666 yhq 555 ymx
(integer) 2 #返回增加和修改的成员数(原始只返回新增数)
> zrange yhq 0 -1 withscores
1) "zhw"
2) 97.0
3) "yjz"
4) 98.0
5) "qhh"
6) 102.0
7) "ymx"
8) 555.0
9) "yhq"
10) 666.0
11) "ldy"
12) 777.0
zcard : 获取集合数量,否则返回0
127.0.0.1:6379> zcard cj
(integer) 2
zrange : 按索引获取集合 按分数由小到大,相同分数按字典序排列 [withscores]
127.0.0.1:6379> zrange cj 0 -1
1) "yhq"
2) "qhh"
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "yhq"
2) "98"
3) "qhh"
4) "99"
zrevrange : 按索引获取集合 按分数由大到小,相同分数按字典序排列 [withscores]
127.0.0.1:6379> zrange myset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> zrevrange myset 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zrevrange myset 2 3
1) "one"
127.0.0.1:6379> zrevrange myset -2 -1
1) "two"
2) "one"
zrank : 获取成员排名,由小到大
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "ys"
2) "-5"
3) "qhh"
4) "94"
5) "yhq"
6) "98"
127.0.0.1:6379> zrank cj ys
(integer) 0
zrevrank : 获取成员的排名,由大到小
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "yhq"
2) "98"
3) "qhh"
4) "99"
127.0.0.1:6379> zrange fs 0 -1 withscores
1) "qhh"
2) "100"
3) "yhq"
4) "100"
127.0.0.1:6379> zrevrank fs yhq
(integer) 0
127.0.0.1:6379> zrevrank fs qhh
(integer) 1
127.0.0.1:6379> zrevrank cj yhq
(integer) 1
127.0.0.1:6379> zrevrank cj qhh
(integer) 0
zcount : 返回指定分数区间内成员数
2) 97.0
3) "yjz"
4) 98.0
5) "qhh"
6) 102.0
7) "ymx"
8) 555.0
9) "yhq"
10) 666.0
11) "ldy"
12) 777.0
zincrby : 对集合指定成员增加分数,可以是负数,不存在则添加,返回新的值,不是有序集合返回错误
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "yhq"
2) "98"
3) "qhh"
4) "99"
127.0.0.1:6379> zincrby cj -5 qhh
"94"
127.0.0.1:6379> zincrby cj -5 ys
"-5"
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "ys"
2) "-5"
3) "qhh"
4) "94"
5) "yhq"
6) "98"
zlexcount : 返回成员区间个数
成员名称前需要加 [ 符号作为开头, [ 符号与成员之间不能有空格
可以使用-和+表示最大最小值
计算成员之间的成员数量时,min和max也计算在内
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "ys"
2) "-5"
3) "qhh"
4) "94"
5) "yhq"
6) "98"
127.0.0.1:6379> zlexcount cj - +
(integer) 3
zscore : 返回集合成员分数
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "ys"
2) "-5"
3) "qhh"
4) "94"
5) "yhq"
6) "98"
127.0.0.1:6379> zscore cj qh
(nil)
127.0.0.1:6379> zscore cj qhh
"94"
zrangebylex / zrevrangebylex : 根据正序/ 降序数据字典返回成员,分数必须相同(用户电话排序,获取某号段[号码为k,v全部为0],获取姓名A的所有人 [A (B)
分数必须相同!!!,如果分数不一致,返回结果不准
成员字符串作为二进制字节数比较,默认是ASCII字符集,如果包含utf8字符集,影响返回结果,建议不要使用
默认情况下,max和min参数前必须加 [,与成员之间不能有空格(包含) (不包含,+-表示最大最小,不能反,会导致结果空
127.0.0.1:6379> zadd zset 0 a 0 aa 0 abc 0 apple 0 b 0 c 0 d 0 d1 0 dd 0 dobble 0 z 0 z1
(integer) 12
127.0.0.1:6379> zrangebylex zset - +
1) "a"
2) "aa"
3) "abc"
4) "apple"
5) "b"
6) "c"
7) "d"
8) "d1"
9) "dd"
10) "dobble"
11) "z"
12) "z1"
127.0.0.1:6379> zrangebylex zset [aa (c limit 3 2
1) "b"
127.0.0.1:6379> zrangebylex zset + - limit 3 2
(empty list or set)
127.0.0.1:6379> zrangebylex zset - + limit 3 2
1) "apple"
2) "b"
zrangebyscore : 按成绩返回列表,由小到大,可以分页
127.0.0.1:6379> zadd myset 1 "one"
(integer) 1
127.0.0.1:6379> zadd myset 2 "two"
(integer) 1
127.0.0.1:6379> zadd myset 3 "three"
(integer) 1
127.0.0.1:6379> zrangebyscore myset -inf +inf
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrangebyscore myset 1 2
1) "one"
2) "two"
zrem : 移除一个或者多个成员
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "ys"
2) "-5"
3) "qhh"
4) "94"
5) "yhq"
6) "98"
127.0.0.1:6379> zrem cj ys yy
(integer) 1
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "qhh"
2) "94"
3) "yhq"
4) "98"
zremrangebylex : 移除有序集合中给定的字典区间的所有成员
成员字符串作为二进制字节数比较,默认是ASCII字符集,如果包含utf8字符集,影响返回结果,建议不要使用
默认情况下,max和min参数前必须加 [,与成员之间不能有空格(包含) (不包含,+-表示最大最小,不能反,会导致结果空
redis 127.0.0.1:6379> ZADD myzset 0 aaaa 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> ZADD myzset 0 foo 0 zap 0 zip 0 ALPHA 0 alpha
(integer) 5
redis 127.0.0.1:6379> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "alpha"
4) "b"
5) "c"
6) "d"
7) "e"
8) "foo"
9) "zap"
10) "zip"
redis 127.0.0.1:6379> ZREMRANGEBYLEX myzset [alpha [omega
(integer) 6
redis 127.0.0.1:6379> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"
4) "zip"
zremrangebyrank : 移除指定排名区间的成员,返回移除数量
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "yh"
2) "12"
3) "ys"
4) "45"
5) "qhh"
6) "94"
7) "yhq"
8) "98"
127.0.0.1:6379> zremrangebyrank cj 0 1
(integer) 2
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "qhh"
2) "94"
3) "yhq"
4) "98"
zremrangebyscore : 移除分数区间的成员
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "yh"
2) "12"
3) "ys"
4) "45"
5) "qhh"
6) "94"
7) "yhq"
8) "98"
127.0.0.1:6379> zremrangebyscore cj 30 50
(integer) 1
127.0.0.1:6379> zrange cj 0 -1 withscores
1) "yh"
2) "12"
3) "qhh"
4) "94"
5) "yhq"
6) "98"
zinterstore : 获取多个集合的交集存到另一个集合 ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]
在给定要计算的key和其他参数之前,必须先给定key的个数(numberkeys) 默认情况下,结果中一个元素的分数是有序集合该元素分数之和,前提是该元素在这些有序集合中都存在,如果destination存在则覆盖
使用WEIGHTS选择,为每个给定的有序集合指定一个乘法因子,在传递给聚合函数之前都先乘以该因子,没有给定默认1
使用AGGREGATE选择,给定聚合方式,默认sum,如果是min最小,max最大
127.0.0.1:6379> zadd zset1 1 "one"
(integer) 1
127.0.0.1:6379> zadd zset1 2 "two"
(integer) 1
127.0.0.1:6379> zadd zset2 1 "one"
(integer) 1
127.0.0.1:6379> zadd zset2 2 "two"
(integer) 1
127.0.0.1:6379> zinterstore out 2 zset1 zset2 weights 2 3
(integer) 2
127.0.0.1:6379> zrange out 0 -1 withscores
1) "one"
2) "5" 1*2+1*3
3) "two"
4) "10" 2*2+2*3
zunionstore : 获取多个集合的并集存到另一个集合 ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]
在给定要计算的key和其他参数之前,必须先给定key的个数(numberkeys) 默认情况下,结果中一个元素的分数是有序集合该元素分数之和,前提是该元素在这些有序集合中都存在,如果destination存在则覆盖
使用WEIGHTS选择,为每个给定的有序集合指定一个乘法因子,在传递给聚合函数之前都先乘以该因子,没有给定默认1
使用AGGREGATE选择,给定聚合方式,默认sum,如果是min最小,max最大
127.0.0.1:6379> zunionstore out 2 zset1 zset2 weights 2 3
(integer) 3
127.0.0.1:6379> zrange out 0 -1 withscores
1) "one"
2) "5"
3) "three"
4) "9"
5) "two"
6) "10"
zpopmax / zpopmin : 删除并返回有序集合key中最多个count个具有最高(低)分的成员,未指定count为1,大于集合基数不报错,返回多个元素时,得分最高的元素将是第一个元素
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "four"
8) "4"
127.0.0.1:6379> zpopmax zset 2
1) "four"
2) "4"
3) "three"
4) "3"
127.0.0.1:6379> zpopmin zset 2
1) "one"
2) "1"
3) "two"
4) "2"
Redis之有序集合命令的更多相关文章
- [PHP] PHP多个进程配合redis的有序集合实现大文件去重
1.对一个大文件比如我的文件为 -rw-r--r-- 1 ubuntu ubuntu 9.1G Mar 1 17:53 2018-12-awk-uniq.txt 2.使用split命令切割成10 ...
- python 操作redis之——有序集合(sorted set) (七)
#coding:utf8 import redis r =redis.Redis(host=") 1.Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中.如果某个成员已经是有序 ...
- php使用redis的有序集合zset实现延迟队列
延迟队列就是个带延迟功能的消息队列,相对于普通队列,它可以在指定时间消费掉消息. 延迟队列的应用场景: 1.新用户注册,10分钟后发送邮件或站内信. 2.用户下单后,30分钟未支付,订单自动作废. 我 ...
- Redis 操作有序集合数据
Redis 操作有序集合数据: > zadd names "Tom" // zadd 用于往有序集合中添加元素,其中 1 在 Redis 中称为 score(分数),用来进行 ...
- redis之(八)redis的有序集合类型的命令
[一]增加元素 --->命令:ZADD key score member [score member] --->向有序集合放入一个分数为score的member元素 --->元素存在 ...
- redis学习-有序集合(zset)常用命令
zadd:有序集合增加一个或者多个键值对 与set集合不同,zset添加的时候需要 指定 score,这个是用来排名的 zrange:返回指定范围的键 zcount:返回集合指定范围的个数(以每个键值 ...
- Redis的Sorted Set有序集合命令
Sorted Set是Set的一个升级版本,它在Set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序.可以理解为有两列的mysql表, ...
- redis数据类型-有序集合
有序集合类型 在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入.删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素.获得指 ...
- redis的有序集合ZSET(stored set)
相关命令 1.ZADD ZADD key-name score member [score member……] 将带有给定分值的成员添加到有序集合里 2.ZREM ZREM key-name mem ...
随机推荐
- #C++初学记录(算法3)
C - 不要62 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司 ...
- SSM三层模型之间的参数传递
Controller接收各种形式的传参: RequestMapping()包含三部分信息: 表单传参: 1.表单action请求 1:参数名称和顺序都要和表单字段名称一致,直接接收(适合字 ...
- 网络编程—代码—UDP数据报传输
UDP:数据报传输 1.接收端 public class Udps { //接收端 public static void main(String[] args) throws IOException ...
- no-siteapp 和 no-transform
简单的说,是禁止转码 . 举个通俗的例子. 你建了一栋房子(网站),百度说我给你做个大门,但是大门上要有我的广告 你不愿意,就建立了一条路叫no-transform 别人去你家走这条路就行了 后来百度 ...
- python recv()是什么
socket有个recv方法,recv有一个参数,指定数据缓冲区的大小 但是现在的问题就是不知道将要接受的数据的大小到底是多少,可能只有几个字节,可能会有几M,google了一下socket的入门文章 ...
- IEEE发布2017年编程语言排行榜:Python高居首位,java第三,php第八
2017年7月18日,IEEE Spectrum 发布了第四届顶级编程语言交互排行榜.因为有各种不同语言的排行,所以 IEEE Spectrum 依据不同的变量对流行度进行了排行.据 IEEE Spe ...
- MySQL索引类型总结和使用技巧
引用地址:http://www.jb51.net/article/49346.htm 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: 复制代码 代码如下: C ...
- ESOURCE_LOCKED - cannot obtain exclusive access to locked queue '2484_0_00163'
早上一运维同事说,一个报盘程序启动的时候报了"ESOURCE_LOCKED - cannot obtain exclusive access to locked queue '2484_0_ ...
- 20145307陈俊达《网络对抗》Exp5 MSF基础应用
20145307陈俊达<网络对抗>Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode? exploit就相当于是载具,各式各样的漏洞在 ...
- CRC32是什么?
CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值.由于CRC32产生校验值时源数据块的每一个bit(位)都参与了计算,所以数据块中即使只有一 ...