×

redis 数据库编程

Redis Api的使用和理解之有序集合

feihu1996 feihu1996 发表于2020-05-17 23:08:37 浏览23 评论0

抢沙发发表评论

六、有序集合类型

1、有序集合键值结构

1.1 key

user:ranking

1.2 value

score

  • 分数/权重
  • 实现有序

value: 元素内容

1.3 特点

  • 无重复元素: 元素内容不能重复,socre可以重复
  • 有序
  • element = element + score
  • 相比无序集合,有序集合操作的时间复杂度略高,需要结合具体的业务场景来使用

2、API

2.1 zadd

zadd key score element

添加一对或多对score和element

时间复杂度为O(logN)

两种内部数据结构

  • ziplist: 内存条件满足的情况下
  • skiplist:

2.2 zrem

zrem key element

删除一个或多个元素

时间复杂度为O(1)

2.3 zscore

zscore key element

返回元素的分数

时间复杂度为O(1)

2.4 zincrby

zincrby key increScore element
  • 增加或减少元素的分数
  • 传递一个负数会减少
  • 时间复杂度为O(1)

2.5 zcard

zcard key
  • 返回元素的总个数
  • 时间复杂度为O(1): 内置计数器

2.6 zrank

zrank key element
  • 返回元素的排名
  • 从小到大的顺序

2.7 zrevrank

zrevrank key element
  • 返回元素的排名
  • 从大到小的顺序

2.8 zrange

zrange key start end [withscores]
  • 获取集合指定排名范围的元素,按照从小到大的顺序
  • withscores可选参数,打印元素score
  • 时间复杂度
    • O(log(n) + m)
    • n,集合中元素的个数

2.9 zrevrange

zrevrange key start end [withscores]
  • 获取集合指定排名范围的元素,按照从大到小的顺序
  • withscores可选参数,打印元素score
  • 时间复杂度
    • O(log(n) + m)
    • n: 集合中元素的个数

2.10 zrangebyscore

zrangebyscore key minScore maxScore [withscores]
  • 返回指定分数范围内的升序元素
  • withscores可选参数,打印元素score
  • 时间复杂度
    • O(log(n) + m)
    • n: 集合中元素的个数

2.11 zrevrangebyscore

zrevrangebyscore key minStore maxScore [withsocres]
  • 返回指定分数范围内的降序元素
  • withscores可选参数,打印元素score
  • 时间复杂度
    • O(log(n) + m)
    • n: 集合中元素的个数

2.12 zcount

zcount key minScore maxScore

返回有序集合内在指定分数范围内的元素个数

时间复杂度

  • O(log(n) + m)
  • n: 集合中元素的个数

2.13 zremrangebyrank

zremrangebyrank key start end

删除指定排名范围内的升序元素

时间复杂度

  • O(log(n) + m)
  • n: 集合中元素的个数

2.14 zremrangebyscore

zremrangebyscore key minScore maxScore

删除指定分数范围内的升序元素

时间复杂度

  • O(log(n) + m)
  • n: 集合中元素的个数

2.15 zinterstore

2.16 zunionstore

3、实战

排行榜

3.1 放进有序集合中

3.2 score

  • timestamp
  • saleCount
  • followCount

群贤毕至

访客