1、概念
与hash的结构基本相同,区别在于value值只能是数字,且会根据value值升序排序。
2、操作
2.1 基础
按照新增,查询,修改,删除的顺序。
2.1.1 zadd
格式:
ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member ...]
元素操作,往zset中一次性添加多个元素。
第一部分,NX,XX,NX只添加元素,当元素存在时,无意义。XX只更新元素,元素不存在时,无意义。
第二部分,GT,LT。当前元素存在,且命令行参数的score大于或者小于原始值时,更新,否则无意义。
第三部分,CH,
第四部分,INCR,当添加此选项时,等价于ZINCRBY命令。键值对只能出现一个,含义是在原始值上添加参数指定的score值。
特殊说明:
Key不存在时,会创建一个空的zset
Key存在,value类型不为zset时,抛错。
当score不合规时,抛错。+inf表示正无穷,-inf表示负无穷,都是可以的。
示例:略
2.1.2 zscore & zmscore
格式:
ZSCORE key member
元素操作,在zset中查询member的score。
特殊说明:
当key或者member不存在时,返回nil。
示例:略
zmscore,m全称为multiple,一次性查询多个member,返回值与member参数顺序一致。
2.1.3 zrange
格式:
ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
元素操作,在zset中进行范围查询。
第一部分,start, stop表示起始位置,截止位置,当start大于stop时,无返回。Stop为负值时,从末尾开始。stop大于元素个数时,设置为最大值。
第二部分,byscore, bylex, 根据score排序,根据lex排序。默认根据index排序,所以start, stop为索引值。当byscore时,start, stop为score值。当为lex,start stop为member的名称。
第三部分,rev,排序方式,加上rev为降序。
第四部分, limit offset count,限制返回条数。
第五部分,withscores,返回值携带score值。
示例:
ZRANGE zset 10 5 REV BYSCORE
当添加rev选项,等价于zrevrange。
当添加byscore选项,等价于zrangebyscore。
当同时添加rev, byscore选项,等价于zrevrangebyscore
当添加bylex, 等价于zrangebylex。
当添加rev选项,等价于zrevrangebylex。
2.1.4 zrank & zrevrank
格式:
ZRANK key member
元素操作,在zset中查询member的索引值,或者称为排名。
特殊说明:
当key或者member不存在时,返回nil
示例:略
rev表示降序。
2.1.5 zrandmember
格式:
ZRANDMEMBER key [count [WITHSCORES]]
元素操作,在zset中随机返回count个member,添加withscores选项,同时返回score值。
特殊说明:
当key不存在时,返回nil
示例:略
2.1.6 zincrby
格式:
ZINCRBY key increment member
元素操作,在zset中将member对应的score增加increment。
特殊说明:
当key不存在时, 会创建新的zset,包含member元素,它的值为0.
当member不存在时,会将它的值设置为0.
示例:略
2.1.7 zrem
格式:
ZREM key member [member ...]
元素操作,在zset中一次性删除多个member。
特殊说明:
当key或者member不存在时,报错。
示例:略
2.1.8 zremrangebyXX
格式:
zremrangebyxx key start stop
元素操作,范围型删除。有三种,zremrangebyrank, zremrangebyscore, zremrangebylex,三种排序方式不同。Rank为索引排序,score为分数排序,lex按照member名称字母排序。
当为byrank时, start stop表示索引值
当为score时,start stop为score值。
当为lex时,start stop为member值,表示按字母排序。
特殊说明:
当key或者member不存在时,报错。
示例:略
2.1.9 zpopmin & zpopmax & zmpop
格式:
ZPOPMIN key [count]
元素操作,在zset中由小到大依次删除count个元素。
特殊说明:
当count不存在时,默认值为1。
示例:略
Zpopmax由大到小,先删除最大元素。
Zmpop,在参数中可以指定多个key,一次性删除多个zset的count个元素。Min,max为命令的选项。
命令名称前缀为b的,表示pop操作可以处于等待(block)状态,当删除不成功时,会处于阻塞状态,可以指定timeout参数,含义为等待的毫秒数。
Bzpopmin,bzpopmax, bzmpop。
2.1.10 zcard
格式:
ZCARD key
元素操作,统计zset中有多少个member。
特殊说明:
当key不存在时,返回0。
示例:略
2.1.11 zcount
格式:
zcount key min max
元素操作,统计zset中score大于min,小于max的元素个数。
示例:略
2.2 集合
2.2.1 zunion & zunionstore
格式:
ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>] [WITHSCORES]
集合操作,计算集合之间的并集。
第一部分, zunion为命令名称, numkeys,为key的个数,与后续的key参数个数保持一致。最少为2。
第二部分,weights weight,在进行聚合函数之前,先对score进行乘法运算,score * weight,不指定时, 为默认值1。
第三部分,aggregate sum min max,当并集有相同元素时,例如其中一个存在a,它的score为2,另外一个也存在a,它的score值为3时,sum为二者相加,min返回二者的最小值,max返回二者的最大值。
第四部分,withscores,略。
示例:
ZUNION 2 zset1 zset2
带store的区别是会将结果保存到destination中。
2.2.2 zdiff & zdiffstore
格式:
ZDIFF numkeys key [key ...] [WITHSCORES]
集合操作,计算集合之间的差集。所有的选项与zunion相同。
示例:
ZDIFF 2 zset1 zset2 WITHSCORES
2.2.3 zinter & zintercard & zinterstore
格式:
ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>] [WITHSCORES]
集合操作,计算集合之间的交集。所有的选项与zunion相同。
示例:略。
zintercard返回交集的个数,而不是返回元素和score。