Redis基本命令使用::zset篇

Redis有6大基本类型,分别是字符串(String)、列表(List)、集合(set)、哈希结构(hash)、有序集合(zset)和基数(HyperLogLog)

redis在线体验地址:http://try.redis.io/

有序集合(ZSet)

介绍:

Redis的有序集合和集合一样是一个简单的字符串集合,但该集合是有序的,且集合内的元素都是唯一的,也就是集合内不会出现重复元素,与集合唯一不同的是,有序集合中每一个元素都有一个double类型的score属性,Redis通过score的大小对元素进行排序的。有序集合中元素不能重复,但是元素的score值可以重复。

常用于做排行榜功能。

Redis中的集合是通过哈希表来实现的,所以获取集合中元素的时间复杂度为O(1)。

创建缓存

  1. 创建一个集合缓存,为集合新增元素

    • 命令格式:zadd key score member [score member ...]

    • 🌰

      1
      2
      3
      4
      5
      6
      7
      8
      zadd zk1 1 c 1 cc 1 ccc 2 cccc

      ---
      创建有序集合zk1,元素为:
      key: c, score: 1
      key: cc, score: 1
      key: ccc, score: 1
      key: cccc, score: 2
  2. 创建一个元素或修改元素的score值(一次只能修改一个元素)

    • 命令格式:zincrby key increment member

    • 🌰

      1
      2
      3
      4
      5
      6
      zincrby zk1 1 cc

      ---
      1. 为集合zk1的元素cc的score进行+1操作
      2. 若集合zk1不存在,则创建
      3. 若元素cc不存在,则创建,且cc的score为1

查询缓存

  1. 查询缓存中元素个数

    • 命令格式:zcard key

    • 🌰

      1
      2
      3
      4
      zcard zk1

      ---
      查询集合zk1内的元素总个数
  2. 查询集合指定范围的元素

    • 命令格式:zrange key start stop [withscores]

    • 🌰

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      1. 返回元素名称
      zrange zk1 0 1
      ---
      返回集合zk1中从下标0到下标1的元素名称,start和stop都是从0开始

      2. 返回元素和元素score
      zrange zk1 0 -1 withscores
      ---
      返回集合zk1中全部元素的名称和分数
      member1
      score1
      member2
      score2
      ★常用于查询排行榜及分数
  3. 查询集合中某元素的下标(下标从0开始)

    • 命令格式:zrank key member

    • 🌰

      1
      2
      3
      4
      zrank zk1 c

      ---
      返回元素c在集合zk1中的下标
  4. 查询集合中某元素的分数

    • 命令格式:zscore key member

    • 🌰

      1
      2
      3
      4
      5
      zscore zk1 c

      ---
      查询集合zk1中元素c的分数
      ★常用于点赞数类别查询等
  5. 查询集合中指定范围的元素,按照score从大到小排序

    • 命令格式:zrevrange key start stop [withscores]

    • 🌰

      1
      2
      3
      4
      zrevrange zk1 0 3 withscore

      ---
      返回集合zk1中从1~4位元素,按照score从大到小
  6. 查询集合中某元素的排名

    • 命令格式:zrevrank key member

    • 🌰

      1
      2
      3
      4
      5
      zrevrank zk1 c

      ---
      返回元素c在集合zk1中的排名
      ★常用于名次查询
  7. 查询指定分数范围内的元素,可分页

    • 命令格式:zrevrangebyscore key maxScore minScore [withscores] [limit offset count]

    • 🌰

      1
      2
      3
      4
      zrevrangebyscore zk1 3 2 withscores limit 0 1

      ---
      分页返回集合zk1中分数从2~3的元素
  8. 查询指定成员区间内的成员

    • 命令格式:zrangebylex key minChar maxChar [limit offset count]

    • 🌰

      1
      2
      3
      4
      zrangebylex zk1 - (c1 limit 0 12

      ---
      返回从第一个元素到元素c1之间的位置
      指令 是否必须 说明
      ZRANGEBYLEX 指令
      key 有序集合键名称
      minChar 字典中排序位置较小的成员,必须以”[“(包含)开头,或者以”(“(不包含)开头,可使用”-“代替,"-"表示取最小值
      maxChar 字典中排序位置较大的成员,必须以”[“(包含)开头,或者以”(“(不包含)开头,可使用”+”代替,"+"表示取最大值
      limit 返回结果是否分页,指令中包含LIMIT后offset、count必须输入
      offset 返回结果起始位置
      count 返回结果数量
  9. 查询指定分数区间内的元素数

    • 命令格式:zcount key min max

    • 🌰

      1
      2
      3
      4
      5
      zcount zk1 1 2

      ---
      返回score值为1~2的所有元素总数
      ★计算排行榜中某一分数区间的数量
  10. 查询指定元素区间内的元素总数

    • 命令格式:zlexcount key min max

    • 🌰

      1
      2
      3
      4
      zlexcount zk1 (c [cccc

      ---
      查询c~cccc之间的元素总数,不包括c,但包括cccc

移除缓存元素

  1. 移除集合中指定的元素

    • 命令格式:zrem key member [member ...]

    • 🌰

      1
      2
      3
      4
      zrem zk1 cc c1

      ---
      移除集合zk1中的元素cc、c1
  2. 移除指定元素区间的所有成员

    • 命令格式:zremrangebylex key min max

    • 🌰

      1
      2
      3
      4
      zremrangebylex zk1 [c (ccc

      ---
      移除集合zk1中元素c到元素ccc之间的所有成员,包括c,但不包括ccc
  3. 移除指定排名区间所有成员

    • 命令格式:zremrangebyrank key start stop

    • 🌰

      1
      2
      3
      4
      zremrangebyrank zk1 0 1

      ---
      移除集合zk1中0~1下标的所有元素
  4. 移除指定分数区间所有成员

    • 命令格式:zremrangebyscore key min max

    • 🌰

      1
      2
      3
      4
      zremrangebyscore zk1 0 1

      ---
      移除集合zk1中score值为0~1的所有元素

特殊操作

  1. 计算多个集合的并集,并存入新的集合

    • 命令格式:zunionstore destinationKey numkeys key[key ...]

    • 🌰

      1
      2
      3
      4
      zunionstore zku 2 zk1 zk2

      ---
      合并集合zk1和zk2,将并集存入zku,集合zku中元素的score为所有参与计算的集合中相同的元素的score之和