008_Redis的ZSet数据类型

1. zset是string类型的有序集合, 不允许有重复的成员。每个成员都会关联一个double类型的分数, Redis正是通过这个分数值, 来为集合中的成员进行从小到大排序的。集合中的成员是唯一的, 但分数(score)却可以重复。集合是通过哈希表实现的, 所以添加、删除、查找的复杂度都是O(1)。集合中最大的成员数为2^{32} - 1 (4294967295, 每个集合可存储40多亿个成员)。

2. 向有序集合添加一个或多个成员

2.1. 语法: zadd key score1 member1 [score2 member2]。

2.2. zadd命令用于将一个或多个成员及其分数加入到集合中。如果某个成员已经是集合的成员了, 那么就更新这个成员的分数值, 并且根据这个分数值, 来保证该成员在正确的位置上。如果有序集合key不存在, 则创建该key的有序集并执行zadd操作。当key存在, 但不是有序集类型时, 返回一个错误。

2.3. 返回被成功添加的新成员的数量, 不包括那些被更新的、已经存在的成员。

2.4. 实例

3. 通过索引区间返回有序集合指定区间内的成员

3.1. 语法: zrange key start stop [withscores]。

3.1. zrange命令返回有集合指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典序(lexicographical order)来排列。下标参数start和stop都以0为底, 也就是说, 以0表示集合的第一个成员, 以1表示集合的第二个成员, 以此类推。你也可以使用负数下标, 以-1表示最后一个成员, -2表示倒数第二个成员, 以此类推。

3.1. 返回指定区间内, 带有分数值(可选)的成员列表。

3.4. 实例

4. 通过索引区间返回有序集合指定区间内的成员(分数从高到低)

4.1. 语法: zrevrange key start stop [withscores]。

4.2. zrevrange命令返回集合指定区间内的成员。其中成员的位置按分数值递减(从大到小)来排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。

4.3. 返回指定区间内, 带有分数值(可选)的成员列表。

4.4. 实例

5. 获取有序集合的成员数

5.1. 语法: zcard key。

5.2. zcard命令用于计算集合中成员的数量。

5.3. 当key存在且是有序集类型时, 返回集合中成员的数量。当key不存在时, 返回0。

5.4. 实例

6. 返回有序集合中指定成员的索引

6.1. 语法: zrank key member。

6.2. zrank返回集合中指定成员的排名(下标)。其中集合的成员按分数值递增(从小到大)顺序排列。

6.3. 如果成员是集合key的成员, 返回member的排名(下标)。如果成员不是集合key的成员, 返回nil。

6.4. 实例

7. 返回有序集中成员的分数值

7.1. 语法: zscore key member。

7.2. zscore命令返回集合中, 成员的分数值。如果成员不是集合key的成员或key不存在, 返回nil。

7.3. 返回成员的分数值, 以字符串形式表示。

7.4. 实例

8. 返回有序集合中指定成员的排名(从大到小)

8.1. 语法: zrevrank key member。

8.2. zrevrank命令返回集合中指定成员的排名(下标)。其中集合中成员按分数值递减(从大到小)排序。排名以0为底, 也就是说, 分数值最大的成员排名为0。

8.3. 如果成员是有序集key的成员, 返回成员的排名。如果成员不是有序集key的成员, 返回nil。

8.4. 实例

9. 计算在有序集合中指定区间分数的成员数

9.1. 语法: zcount key min max。

9.2. zcount命令用于计算有序集合中指定分数区间的成员数量。

9.3. 返回分数值在min和max之间(默认包括score值等于min和max)的成员的数量。

9.4. 实例

10. 有序集合中对指定成员的分数加上增量increment

10.1. 语法: zincrby key increment member。

10.2. zincrby命令对有序集合中指定成员的分数加上增量increment。可以通过传递一个负数值increment, 让分数减去相应的值。当key不存在时, 则创建该key的有序集并执行zadd操作。当member不是key的成员时, 直接给该key的有序集合中添加值。当key不是有序集类型时, 返回一个错误。

10.3. 返回member成员的新分数值, 以字符串形式表示。

10.4. 实例

11. 将所有给定的有序集的交集存储在新的有序集合中

11.1. 语法: zinterstore destination numkeys key [key ...]。

11.2. zinterstore命令将一个或多个有序集的交集储存到destination中, 其中给定key的数量必须是numkeys参数指定的数量。默认情况下, 结果集中某个成员的分数值是所有给定集和中该成员分数值之和。

11.3. 返回保存到目标结果集的成员数量。

11.4. 实例

12. 将所有给定的有序集的并集存储在新的有序集合中

12.1. 语法: zunionstore destination numkeys key [key ...]。

12.2. zunionstore命令将一个或多个有序集的并集储存到destination中, 其中给定key的数量必须是numkeys参数指定的数量。默认情况下, 结果集中某个成员的分数值是所有给定集和中该成员分数值之和。

12.3. 返回保存到destination的结果集的成员数量。

12.4. 实例

13. 移除有序集合中的一个或多个成员

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

13.2. zrem命令用于移除有序集中的一个或多个成员, 不存在的成员将被忽略。当key存在但不是有序集类型时, 返回一个错误。

13.3. 返回被成功移除的成员的数量, 不包括被忽略的成员。

13.4. 实例

14. 移除有序集合中给定的排名区间的所有成员

14.1. 语法: zremrangebyrank key start stop。

14.2. zremrangebyrank命令用于移除有序集中, 指定排名(下标)区间内的所有成员。

14.3. 返回被移除成员的数量。

14.4. 实例

15. 移除有序集合中给定的分数区间的所有成员

15.1. 语法: zremrangebyscore key min max。

15.2. zremrangebyscore命令用于移除有序集中, 指定分数(score)区间内的所有成员。

15.3. 返回被移除成员的数量。

15.4. 实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值