Redis 的 Sorted Set 有序集合命令

原文地址 Redis 的 Sorted Set 有序集合命令

Sorted Set 是 Set 的一个升级版本,它在 Set 的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset 会自动重新按新的值调整顺序。可以理解为有两列的 mysql 表,一列存 value,一列存顺序。操作中 key 理解为 zset 的名字。

 Sorted Set 有序集合
添加一个元素>zadd myzset 1 one
向 myzset 集合添加一个顺序号为 “1” 的元素“one”
注: 1. 集合中的元素值是唯一的 (不允许重复,也没有重复)。
    2. 重复添加某元素时,虽返回 0,但实际会更新了此元素的顺序号值。
    3. 顺序号值允许重复,即同一顺序号值可以对应多个的元素值 (多个元素值可以对应同一顺序号)。
使某元素的顺序号自增>zincrby myzset 1 three  使元素 “three” 的顺序号值 + 1
>zincrby myzset 3 three  使元素 “three” 的顺序号值 + 3
>zincrby myzset -2 three 使元素 “three” 的顺序号值 - 2
注: 1. 给正值就自加,给负值就自减;
    2. 若给的元素值不存在,则会将其序号值设为 0,然后再运算。
返回:返回自增 (自减) 运算后的结果值
  
部分获取集合元素
注:range 是通过 (下标) 索引偏移获取元素
>zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "file"
4) "2"
5) "three"
6) "4"
7) "seven"
8) "7"
获取全部元素,并附带序号;排序:zrange 将顺序号按从 “小 -> 大”排序
>zrange myzset 2 -3 withscores
获取下标 (索引) 从第 2 个偏移到第 - 3 个偏移的元素
注:第一个偏移从首 0 计数 (需 n1>=0),第二个偏移正负均可 (首、尾偏移值均为 - 1);
>zrevrange myzset 0 -1 withscores
1) "seven"
2) "7"
3) "three"
4) "4"
5) "file"
6) "2"
7) "one"
8) "1"
获取全部元素,并附带序号;排序:zrevrange 将顺序号按从 “大 -> 小”排序
>zrevrange myzset 1 -2 withscores
1) "three"
2) "4"
3) "file"
4) "2"
先按顺序号从 “小 -> 大”排序
然后指定 “顺序号区间” 获取元素
注:by score 按顺序号取元素
>zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "file"
4) "2"
5) "three"
6) "4"
7) "seven"
8) "7"
>zrangebyscore myzset 4 6 withscores
1) "three"
2) "4"
求顺序号介于 4~6 区间元素,只有一个 “three” 符合条件 (range 默认按序号由小 -> 大排序)
>zrangebyscore myzset 4 7 withscores
1) "three"
2) "4"
3) "seven"
4) "7"
求顺序号介于 4~7 区间元素,有一个 “three” 和“seven”符合条件 (range 默认按序号由小 -> 大排序)
先按顺序号从 “大 -> 小”排序
然后指定 “顺序号区间” 获取元素
注:by score 按顺序号取元素
>zrevrange myzset 0 -1 withscores
1) "seven"
2) "7"
3) "three"
4) "4"
5) "file"
6) "2"
7) "one"
8) "1"
>zrevrangebyscore myzset 7 4 withscores
1) "seven"
2) "7"
3) "three"
4) "4"
求顺序号介于 7~4 区间元素,有一个 “seven” 和“three”符合条件 (range 默认按序号由大 -> 小排序)
  
先按顺序号从 “小 -> 大”排序,
然后获取 “指定元素” 的下标 (索引) 值
rank [ræŋk] 次序,顺序
>zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "file"
4) "2"
5) "three"
6) "4"
7) "seven"
8) "7"
>zrank myzset one     获取元素 “one” 的下标 (索引) 值
(integer) 0
>zrank myzset three   获取元素 “three” 的下标 (索引) 值
(integer) 2
注:zrank 先将集合按顺序号按 “小 -> 大”排序,然后取元素在集合中的下标 (索引) 顺序,类似数组下标从 0 开始计数,one 和 three 的下标 (索引) 值分别是 0 和 2,序号值分别是 1 和 4。元素下标 (索引) 值 同 元素顺序号值是两个概念。
先按顺序号从 “大 -> 小”排序,
然后获取 “指定元素” 的下标 (索引) 值
rank [ræŋk] 次序,顺序
>zrevrange myzset 0 -1 withscores
1) "seven"
2) "7"
3) "three"
4) "4"
5) "file"
6) "2"
7) "one"
8) "1"
说明:zrevrange 将序号 score 值从大到小排序
>zrevrank myzset one
(integer) 3
>zrevrank myzset three
(integer) 1
one 和 three 的下标 (索引) 值分别是 3 和 1
  
返回给定元素对应的顺序号>zscore myzset three
"4"
  
先按顺序号从 “小 -> 大”排序,
返回给定” 顺序号区间 “的元素个数
>zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "file"
4) "2"
5) "three"
6) "4"
7) "seven"
8) "7"
>zcount myzset 2 3
(integer) 1
>zcount myzset 2 4
(integer) 2
>zcount myzset 2 5
(integer) 2
>zcount myzset 2 6
(integer) 2
>zcount myzset 2 7
(integer) 3
获取集合中元素总个数>zcard myzset
返回集合中的元素总个数;
  
按元素名称删除元素>zrem myzset two
从 myzset 集合中删除指定元素 “two”, 对应序号被一起删除
>zrem myzset four six
一次删除多个元素
返回实际被删除的元素个数
先按顺序号从 “小 -> 大”排序,
按索引 (下标) 区间删除元素
>zremrangebyrank myzset 1 1
删除索引 (下标) 区间在 [1,1] 的元素,即删除下标为 1 的元素
>zremrangebyrank myzset 2 4
删除索引 (下标) 区间在 [2,4] 的元素
返回实际被删除的元素个数
先按顺序号从 “小 -> 大”排序,
按顺序号区间删除元素
>zremrangebyscore myzset 2 2
(integer) 1
删除顺序号区间在 [2,2] 的元素,即:删除顺序号为 2 的元素。
>zremrangebyscore myzset 2 4
删除顺序号区间在 [2,4] 的元素
返回实际被删除的元素个数
  
posted @ 2020-12-19 20:48  寒小韩  阅读(147)  评论(0编辑  收藏  举报