redis zset



1. 有序集合(string)

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

image


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可以帮助我们实现电话号码或姓名的排序

posted @ 2021-03-02 22:20  linsonga  阅读(223)  评论(0)    收藏  举报