1. 有序集合(string)

有序集合类型 (Sorted Set或ZSet) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序值。有序集合保留了集合不能有重复成员的特性(分值可以重复),但不同的是,有序集合中的元素可以排序。

redis zset 个数 redis zset长度_redis zset 个数


2. 内部实现

有序集合是由 ziplist (压缩列表) 或 skiplist (跳跃表) 组成的。

当数据比较少时,有序集合使用的是 ziplist 存储的,有序集合使用 ziplist 格式存储必须满足以下两个条件:

  • 有序集合保存的元素个数要小于 128 个;
  • 有序集合保存的所有元素成员的长度都必须小于 64 字节。

如果不能满足以上两个条件中的任意一个,有序集合将会使用 skiplist 结构进行存储。


3. 常用命令

命令

描述

zadd key score1 member1 [score2 member2]

添加集合或者更新

zcard key

获取集合数量

zcount key min max

获取集合中指定区间数量

zincrby key increment member

集合中对指定成员的数增量 increment

zinterstore destination numkeys key [key ...]

批量计算交集并将结果集存储在新的集合 destination 中

zlexcount key min max

在集合中计算指定字典区间内成员数量

zrange key start stop [WITHSCORES]

通过索引区间返回元素

zrangebylex key min max [LIMIT offset count]

通过字典区间返回元素

zrangebyscore key min max [WITHSCORES] [LIMIT]

通过分数返回指定区间内的成员

zrank key member

返回指定成员的索引

zrem key member [member ...]

批量移除集合元素

zremrangebylex key min max

移除给定的区间的成员

zremrangebyrank key start stop

移除给定排名区间元素

zremrangebyscore key min max

移除给定的分数区间元素

zrevrange key start stop [WITHSCORES]

返回指定区间内的成员,通过索引,分数从高到低

zrevrangebyscore key max min [WITHSCORES]

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

zrevrank key member

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

zscore key member

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

zunionstore destination numkeys key [key ...]

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

zscan key cursor [MATCH pattern] [COUNT count]

迭代有序集合中的元素


4. 使用场景

  1. 排行榜系统
    如学生成绩的排名。某视频网站的用户点赞、播放排名、电商系统中商品的销量排名
  2. 电话号码排序
    使用ZRANGEBYLEX或ZREVRANGEBYLEX可以帮助我们实现电话号码或姓名的排序