跳到主要内容

[toc]

redis数据类型 zset 有序集合

zset(有序集合)简介

简介: 将 set 中的元素增加一个权重参数score,元素按score有序排列

可以存储的值: 有序集合

操作: 添加、获取、删除元素,根据分值范围或者成员来获取元素,计算一个键的排名

应用场景: 排行榜;带权重的消息队列

范围:集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。

特点:每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

使用示例:

127.0.0.1:6379> ZADD z1 1 aaa
(integer) 1
127.0.0.1:6379> ZADD z1 2 bbb
(integer) 1
127.0.0.1:6379> ZADD z1 3 ccc
(integer) 1
127.0.0.1:6379> ZRANGE z1 0 -1
1) "aaa"
2) "bbb"
3) "ccc"

redis有序集合常用命令

zadd key score1 member1

含义:向有序集合添加一个或多个成员,或者更新已存在成员的分数

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379> ZRANGE z1 0 -1
1) "a"
2) "b"
3) "c"

zcard key

含义:获取有序集合的成员数

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379> ZCARD z1
(integer) 3

zcount key min max

含义:计算在有序集合中指定区间分数的成员数

示例:

127.0.0.1:6379> ZADD z1 1 aaa
(integer) 1
127.0.0.1:6379> ZADD z1 1 bbb
(integer) 1
127.0.0.1:6379> ZADD z1 2 ccc
(integer) 1
127.0.0.1:6379> ZADD z1 3 ddd
(integer) 1
127.0.0.1:6379> ZADD z1 4 eee
(integer) 1
127.0.0.1:6379> ZCOUNT z1 1 3
(integer) 4

zincrby key increment member

含义:有序集合中对指定成员的分数加上增量 increment

示例:

127.0.0.1:6379> ZADD z1 1 aaa
(integer) 1
127.0.0.1:6379> ZINCRBY z1 5 1
"5"

zinterstore destination numkeys key [key ...]

含义:计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

示例:

127.0.0.1:6379> ZADD z1 1 aaa 2 bbb 3 ccc 4 ddd 5 eee 6 fff
(integer) 6
127.0.0.1:6379> ZADD z2 1 aaa 2 bbb 3 ccc 5 hhh 6 ttt 9 wwww
(integer) 6

#这里必须要指定一下有序集合的个数
127.0.0.1:6379> ZINTERSTORE z3 2 z1 z2
(integer) 3
127.0.0.1:6379> ZRANGE z3 0 -1
1) "aaa"
2) "bbb"
3) "ccc"

zlexcount key min max

含义:在有序集合中计算指定字典区间内成员数量

示例:

zrange key start stop [WITHSCORES]

含义:通过索引区间返回有序集合指定区间内的成员

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379> ZRANGE z1 0 -1
1) "a"
2) "b"
3) "c"

zrangebylex key min max [LIMIT offset count]

含义:通过字典区间返回有序集合的成员

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZRANGEBYLEX z1 [b [e
1) "b"
2) "c"
3) "d"
4) "e"

zrangebyscore key min max [WITHSCORES] [LIMIT]

含义:通过分数返回有序集合指定区间内的成员

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZRANGEBYSCORE z1 2 5
1) "b"
2) "c"
3) "d"
4) "e"

zrank key member

含义:返回有序集合中指定成员的索引

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZRANGE z1 0 3
1) "a"
2) "b"
3) "c"
4) "d"

zrem key member1 [member2 ...]

含义:移除有序集合中的一个或多个成员

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZREM z1 a c
(integer) 2
127.0.0.1:6379> ZRANGE z1 0 -1
1) "b"
2) "d"
3) "e"
4) "f"

zremrangebylex key min max

含义:移除有序集合中给定的字典区间的所有成员

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZREMRANGEBYLEX z1 [c [e
(integer) 3
127.0.0.1:6379> ZRANGE z1 0 -1
1) "a"
2) "b"
3) "f"

zremrangebyrank key start stop

含义:移除有序集合中给定的排名区间(下标)的所有成员

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZREMRANGEBYRANK z1 0 3
(integer) 4
127.0.0.1:6379> ZRANGE z1 0 -1
1) "e"
2) "f"

zremrangebyscore key min max

含义:移除有序集合中给定的分数区间的所有成员

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZREMRANGEBYSCORE z1 2 5
(integer) 4
127.0.0.1:6379> ZRANGE z1 0 -1
1) "a"
2) "f"

zrevrange key start stop [WITHSCORES]

含义:返回有序集合中指定区间内的成员,通过索引,分数从高到低,索引为0的元素在最后

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6

#这里的下标也是从0开始,但是下标为0的元素在最后
127.0.0.1:6379> ZREVRANGE z1 1 3
1) "e"
2) "d"
3) "c"
127.0.0.1:6379> ZREVRANGE z1 0 1
1) "f"
2) "e"

zrevrangebyscore key max min [WITHSCORES]

含义:返回有序集中指定分数区间内的成员,分数从高到低排序

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZREVRANGEBYSCORE z1 3 1
1) "c"
2) "b"
3) "a"

zrevrank key member

含义:返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZREVRANK z1 c
(integer) 3

zscore key member

含义:返回有序集中,成员的分数值

示例:

127.0.0.1:6379> ZADD z1 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZSCORE z1 f
"6"

zunionstore destination numkeys key1 [key2 ...]

含义:计算给定的一个或多个有序集的并集,并存储在新的 key 中

示例:

127.0.0.1:6379> ZADD z1 1 aaa 2 bbb 3 ccc
(integer) 3
127.0.0.1:6379> ZADD z2 1 aaa 2 ttt 3 vvv
(integer) 3
127.0.0.1:6379> ZUNIONSTORE z3 2 z1 z2
(integer) 5
127.0.0.1:6379> ZRANGE z3 0 -1
1) "aaa"
2) "bbb"
3) "ttt"
4) "ccc"
5) "vvv"

zscan key cursor [MATCH pattern] [COUNT count]

含义:迭代有序集合中的元素(包括元素成员和元素分值)

示例: