七、Redis之sorted set

sorted set也是Redis中常用的类型。可以用来解决热搜,排名前十等问题。

ZADD

ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]

zadd将多个分数和元素对添加到sorted set中。还有些选项影响了zadd的行为:

  • XX: 仅更新已存在的元素。不要添加新元素。
  • NX:只添加新元素。不要更新现有元素。
  • LT:仅在新得分低于当前得分时更新现有元素。此标志不会阻止添加新元素。
  • GT:只有当新分数大于当前分数时,才更新现有元素。此标志不会阻止添加新元素。
  • CH:CH是changed的缩写,返回值表示修改的元素数量。
  • INCR:当指定此选项时,ZADD的行为类似于ZINCRBY。在此模式下只能指定一个分数元素对。

ZCARD

ZCARD key

zcard返回排序集中分数-元素对的数量。

ZCOUNT

ZCOUNT key min max

zcount返回分数在min和max范围(包含两端)内分数-元素对的数量。

ZINCRBY

ZINCRBY key increment member

ZINCRBY将成员的分数递增increment。

ZLEXCOUNT

ZLEXCOUNT key min max

当sorted set中所有的分数都相同时,比较的是元素的字典顺序。ZLEXCOUNT返回元素在min和max范围内分数-元素对的数量

-表示无穷小,+表示无穷大,[表示包含,( 表示不包含。

ZMSCORE

ZMSCORE key member [member ...]

zmscore返回排序集中多个成员对应的分数。

ZRANDMEMBER

ZRANDMEMBER key [count [WITHSCORES]]

zrandmember随机返回count个元素。withscores选项同时返回分数。

ZRANGE

ZRANGE key start stop [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]

返回存储在的排序集中的指定元素范围(start到stop)。ZRANGE可以执行不同类型的范围查询:按索引(排名)、按分数或按词典顺序。

元素的顺序是从最低到最高的分数。具有相同分数的元素按字典顺序排列。可选的REV参数颠倒了顺序,因此元素从最高分数到最低分数排序,分数关系通过反向词典排序来解决。

zrange默认是按照分数从小到大排序。WITHSCORES选项同时查询出分数。-1表示最后一个元素,-2表示倒数第二个元素。

还可以用[表示包含,(表示不包含。

rev选项就是从大到小排序。

bylex选项就是当所有分数都相同时,按照元素的字段顺序比较。-表示无穷小,+表示无穷大。

最后的limit offset count就是类似sql中的分页参数。

ZRANGEBYLEX

ZRANGEBYLEX key min max [LIMIT offset count]

zrangebylex等同于zrange key min max bylex limit offset count。

ZRANGEBYSCORE

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

zrangebyscore等同于zrange key min max byscore limit offset count。

ZRANGESTORE

ZRANGESTORE dst src min max [BYSCORE|BYLEX] [REV] [LIMIT offset count]

zrangestore的效果类似与将zrange src min max [BYSCORE|BYLEX] [REV] [LIMIT offset count]的结果保存到dst的sorted set中。

如果zset2原来就有数据,执行后zset2的数据会被覆盖。

ZRANK

ZRANK key member [WITHSCORE]

zrank返回member在sorted set中的排名(按照分数从小到大或分数都相同时,按照元素的字典顺序从小到大)。排名第一的返回0.

ZREM

ZREM key member [member ...]

zrem从sorted set中移除多个member。

ZREMRANGEBYLEX,ZREMRANGEBYRANK,ZREMRANGEBYSCORE

ZREMRANGEBYLEX key min max
ZREMRANGEBYRANK key start stop
ZREMRANGEBYSCORE key min max

以上三个命令都是从sorted set中移除指定范围内的元素。ZREMRANGEBYLEX是当所有分数都相同时,移除在指定范围内的所有元素。ZREMRANGEBYRANK是移除指定排名范围内的所有元素。ZREMRANGEBYSCORE是移除指定分数内的所有元素。

ZREVRANGE

ZREVRANGE key start stop [WITHSCORES]

返回存储在key处的排序集中的指定元素范围。这些元素被认为是从最高分数到最低分数排序的。对于得分相等的元素,使用降序词典顺序。

ZREVRANGEBYLEX

ZREVRANGEBYLEX key max min [LIMIT offset count]

当所有元素的分数都相等时,按照元素的字典顺序逆序返回在max到min之间的所有元素。注意:max和min之间的位置。

ZREVRANK

ZREVRANK key member [WITHSCORE]

逆序返回元素在sorted set中的排名。

ZSCAN

ZSCAN key cursor [MATCH pattern] [COUNT count]

zscan的效果类似于hscan。

ZSCORE

ZSCORE key member

zscore返回member在sorted set中的分数。

集合运算

在来看下集合运算:

ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
ZINTERCARD numkeys key [key ...] [LIMIT limit]
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

ZDIFF numkeys key [key ...] [WITHSCORES]
ZDIFFSTORE destination numkeys key [key ...]

ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

sorted set也是一种set。它的集合运算与set的集合运算基本相似。差别在于sorted set多个了分数。

使用WEIGHTS选项,可以为每个输入排序集指定一个乘法因子。这意味着,在传递给聚合函数之前,每个输入排序集中每个元素的得分都要乘以这个因子。当未给出权重时,乘法因子默认为1。聚合函数是SUM、MIN、MAX。聚合函数处理元素间的分数。SUM是分数相加。min是分数间的最小值。max是分数间的最大值。

当指定aggregate为sum时,求并集后b的分数为5.

当指定weights后,计算分数时要乘以相应的weight。zset4的weight指定为2,zset5的weight指定为1.所有zset4的b计算后的分数为2乘2等于4.大于zset5计算后的分数为3。

ZMPOP,BZMPOP,ZPOPMAX,BZPOPMAX,ZPOPMIN,BZPOPMIN

ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]
BZMPOP timeout numkeys key [key ...] MIN|MAX [COUNT count]

ZPOPMAX key [count]
BZPOPMAX key [key ...] timeout

ZPOPMIN key [count]
BZPOPMIN key [key ...] timeout

ZMPOP从提供的键名列表中的第一个非空排序集中弹出一个或多个元素,这些元素是成员分数对。可以弹出多个元素,但是只从一个key中取。当使用MIN选项时,弹出的元素是第一个非空排序集中得分最低的元素。MAX选项会弹出得分最高的元素。可选的COUNT可用于指定要弹出的元素数量,默认设置为1。BZMPOP是ZMPOP的阻塞版本,如果都没有数据时会阻塞,直到指定的超时时间。ZPOPMAX相当于zmpop max。ZPOPMIN相当于zmpop min。

在第一个控制台运行bzmpop 2000 2 zset6 zset7 min后,在启动另一个控制台,运行zadd zset7 1 a 3 c

再次运行:

posted @ 2024-10-04 15:27  shigp1  阅读(130)  评论(0编辑  收藏  举报