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的命令没有一个兼具设置过期时间的功能。