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。