redis zset使用

zset是sorted set,以score排序,而不是以插入顺序排序。元素值不能一样,但元素score可以一样,score可以是整数,也可以是小数。在一些特殊场景下会用到这个数据类型,如按照点赞量排序等。

1、zadd:向有序集合添加一个或多个元素,或者更新现有元素的score

语法:zadd key [nx | xx] [gt | lt] [ch] [incr] score member [score member . . .]

如zadd bar 10 a 20 b 30 c 40 d,其中a的score是10,b的score是20,c的score是30,d的score是40。

nx:not exists的简称,只有这个元素不存在时,才起作用,即只能新增元素。如zadd bar nx 50 e

xx:只能更新元素的score。如zadd bar xx 15 a

incr:增加指定元素的score,此时,只能指定一个元素及其score。如zadd bar incr 10 a,把a的score加10。如果元素不存在,则会新增。

2、zrange:查看有序集合的元素

语法:zrange key min max [byscore | bylex] [rev] [limit offset count] [withscores]

min、max默认是排名索引,索引从0开始。如果指定byscore的话,则是score。

如zrange bar 0 9 withscores,取索引在[0, 9]之间的元素。

byscore:指定score区间,如zrange bar 10 30 byscore withscores。

rev:逆序。

如zrange bar 0 9 rev withscores,按照score倒序排列,取前10个元素。

zrange bar 30 10 byscore rev withscores,取score在[10, 30]之间的,按照score降序排列。注意,这里大的score在前,小的score在后。

limit offset count,limit是关键字,后面跟两个整数,第一个是偏移量,第二个是取元素的数量,如zrange bar -100 100 byscore limit 2 3 withscores,取score在[-100, 100]之间的,按照score升序排列,从第2个开始取,取3个元素。

zrange bar 100 -100 byscore rev limit 0 10 withscores,取score在[-100, 100]之间的,按照score降序排列,从第0个开始取,取10个元素。

相近命令:zrangebyscore、zrangestore

zrangebyscore:等同于zrange命令加byscore选项

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

如zrangebyscore bar -100 100 withscores limit 0 10

特殊地,可以用-inf代表最小,+inf代表最大,如zrangebyscore bar -inf +inf withscores limit 0 10

zrangestore:同zrange,额外将结果存储到一个新的有序集合中

语法:zrangestore dst src min max [byscore | bylex] [rev] [limit offset count] [withscores]

如zrangestore rbar bar 0 9,把bar前10个元素赋值到rbar有序集合中

3、zrevrange:zrange的逆序

语法:zrevrange key start stop [withscores]

如zrevrange bar 0 9 withscores,根据score从高到低,查看前10个元素。

相近命令:zrevrangebyscore

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

如zrevrangebyscore bar 100 -100 withscores limit 0 10

取score在[-100, 100]之间的,按照score降序排列,从第0个开始取,取10个元素

4、zcard:查看有序集合的元素个数

语法:zcard key

如zcard bar,会返回一个整数。

5、zcount:查看指定score区间的元素的个数

语法:zcount key min max

如zcount bar 0 10,会返回一个整数

6、zincrby:增加有序集合中指定元素的score

语法:zincrby key increment member

如zincrby bar 100 a,效果等同于zadd key incr score member

7、zrank:取指定元素的排名索引

语法:zrank key member

如zrank bar b,返回1。

相近命令:zrevrank:查倒序排名

语法:zrevrank key member

如zrevrank bar a,返回2,即是第三名,前面还有2个元素的score比a的score大。

8、zrem:删除指定的一个或几个元素

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

如zrem bar a b,这时bar只剩c、d两个元素

相近命令:zremrangebyrank、zremrangebyscore

zremrangebyrank:从有序集合中删除指定排名区间内的元素

语法:zremrangebyrank key start stop

如zremrangebyrank bar 0 1,删除前2个元素

zremrangebyrank bar 0 -1,删除全部元素

zremrangebyscore:从有序集合中删除指定score区间内的元素

语法:zremrangebyscore key min max

如zremrangebyscore bar -100 100,删除score在[-100, 100]之间的元素

9、zscore:查看指定元素的score

语法:zscore key member

如zscore bar c,返回30

10、zinterstore

相近命令:zunionstrore

11、zscan

从5.0.0之后,新增了zpopmax、zpopmin,用于弹出score最大、最小的元素。

12、zpopmax

语法:zpopmax key [count]

如zpopmax bar,弹出score最大的元素

zpopmax bar 2,弹出score排前2的元素

相近命令:zpopmin,弹出score最小的元素

从6.2.0之后,新增了zinter、zunion、zdiff、zdiffstore。新增了zmscore,用于一次性查看指定的多个元素的score,新增了zrandmember,用于查看一个随机的元素。

13、zinter:对给定的一个或多个有序集合取交集

zinterstore:对给定的一个或多个有序集合取交集,并做聚合操作,将结果存到目标有序集合中。默认是sum

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

aggregate是个关键字

假如有一个bbr,zadd bbr 0 a 1 b 2 c 3 d,假如有一个bcr,zadd bcr 4 a 5 b 6 g 7 h

如zinterstore bdr 2 bbr bcr,此时查看bdr,会发现有2个元素,依次是a、b,score分别是4、6。其中a的score是通过0+4算出来的,b的score是通过1+5算出来的。

zinterstore ber 2 bbr bcr aggregate max,此时查看ber,会发现有2个元素,依次是a、b,score分别是4、5。其中a的score是0和4的较大值,b的score是1和5的较大值。

zunionstore:对给定的一个或多个有序集合取并集,并做聚合操作,将结果存到目标有序集合中。默认是sum

zdiffstore:对给定的一个或多个有序集合取差集。

14、zmscore

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

如zmscore bar a b,返回一个score列表。

15、zrandmember

语法:zrandmember key [count [withscores]]

如zrandmember bar 2,随机查看有序集合的两个元素。

操作zset的命令没有一个兼具设置过期时间的功能。

原文地址:https://www.cnblogs.com/koushr/p/5873436.html