Redis(七)zset 有序集合

158 阅读4分钟

这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

一:zset有序集合数据结构

[
    "user":[
        "camellia1":90,
        "camellia2":100,
        "camellia3":90
    ]
]

二:zset有序集合相关操作命令(PHP+linux)

1:linux命令使用

(1):添加一个键值对到有序集合。如果 成功则返回1;如果键已经存在,返回0
zadd zset-key 90 "camellia1"   // 执行成功返回1
zadd zset-key 100 "camellia2"   // 执行成功返回1
zadd zset-key 90 "camellia3"   // 执行成功返回1
zadd zset-key 90 "camellia1"   // 执行失败返回0
(2):通过hscore获取一个给定键camellia1的值。
zscore zset-key "camellia1"               // 返回90
(3):获取添加的所有元素,查看刚刚的到底添加了哪几个值
zrange zset-key 0 -1 withscores
输出:

1) "camellia1"
2) "90"
3) "camellia3"
4) "90"
5) "camellia2"
6) "100"
(4):删除一个键,成功返回1,否则,返回0
zrem zset-key "camellia1"   // 返回1

2:PHP命令使用

(1):插入一个键值对到zset-key有序集合。1代表插入成功;0元素代表已经存在
// 插入一个键值对到zset-key有序集合。1代表插入成功;0元素代表已经存在
    $res = $redis->zadd("zset-key",900,'camellia1'); // 返回1
(2):使用zscore获取键对应的值。我们试试获取camellia1的值。
// 取值
    $aa = $redis->zscore("zset-key","camellia1");
    var_dump($aa);           // 返回 900
(3):使用zrange获取刚刚插入的全部值,看看里面包含哪些键值对
// 获取刚刚插入的值
    $str = $redis->zrange("zset-key",0,-1,true);


输出:结果是一个完整的数组

array(3) { [90]=> float(0) [900]=> float(0) ["camellia1"]=> float(900) }
(4):删除其中一个键。成功返回1,反之,返回0

rrr=rrr = redis->zrem("zset-key","90"); // 返回int 1 var_dump($rrr);

3:zset常用命令

序号

命令及描述

1

ZADD   key score1 member1 [score2 member2] 
  向有序集合添加一个或多个成员,或者更新已存在成员的分数

2

ZCARD   key 
  获取有序集合的成员数

3

ZCOUNT   key min max 
  计算在有序集合中指定区间分数的成员数

4

ZINCRBY   key increment member 
  有序集合中对指定成员的分数加上增量 increment

5

ZINTERSTORE   destination numkeys key [key ...] 
  计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

6

ZLEXCOUNT   key min max 
  在有序集合中计算指定字典区间内成员数量

7

ZRANGE   key start stop [WITHSCORES] 
  通过索引区间返回有序集合指定区间内的成员

8

ZRANGEBYLEX   key min max [LIMIT offset count] 
  通过字典区间返回有序集合的成员

9

ZRANGEBYSCORE   key min max [WITHSCORES] [LIMIT] 
  通过分数返回有序集合指定区间内的成员

10

ZRANK   key member 
  返回有序集合中指定成员的索引

11

ZREM   key member [member ...] 
  移除有序集合中的一个或多个成员

12

ZREMRANGEBYLEX   key min max 
  移除有序集合中给定的字典区间的所有成员

13

ZREMRANGEBYRANK   key start stop 
  移除有序集合中给定的排名区间的所有成员

14

ZREMRANGEBYSCORE   key min max 
  移除有序集合中给定的分数区间的所有成员

15

ZREVRANGE   key start stop [WITHSCORES] 
  返回有序集中指定区间内的成员,通过索引,分数从高到低

16

ZREVRANGEBYSCORE   key max min [WITHSCORES] 
  返回有序集中指定分数区间内的成员,分数从高到低排序

17

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

18

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

19

ZUNIONSTORE   destination numkeys key [key ...] 
  计算给定的一个或多个有序集的并集,并存储在新的 key 中

20

ZSCAN   key cursor [MATCH pattern] [COUNT count] 
  迭代有序集合中的元素(包括元素成员和元素分值)

以上基本上是我看的redis ZSET有序集合类型的基本内容,有不足的地方,还请大佬指出。

有好的建议,请在下方输入你的评论。

欢迎访问个人博客 guanchao.site

欢迎访问小程序:

在这里插入图片描述