【Redis初阶】Zset 有序集合

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
🌱🌱个人主页:奋斗的明志
🌱🌱所属专栏:Redis

📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。

在这里插入图片描述

前言

Zset有序集合相对于字符串、列表、哈希、集合来说会有一些陌生。它保留了set集合不能有重复成员的特点,但与set集合不同的是,Zset有序集合中的每个元素都有一个唯一的浮点类型的分数(score)与之关联,着使得Zset有序集合中的元素是可以维护有序性的,但这个有序不是用下标,作为排序依据而是用这个分数。如图所示,该有序集合显示了三国中的武将的武力。(这里的有序指升序/降序)(排序规则按照一定的分数)

在这里插入图片描述

  • 有序集合提供了获取指定分数和元素范围查找、计算成员排名等功能,合理地利用有序集合,可
    以帮助我们在实际开发中解决很多问题。

  • 有序集合中的元素是不能重复的(唯一的),但分数允许重复。类比于一次考试之后,每个人一定有一个唯一的分数,但分数允许相同。

列表、集合、有序集合三者的异同点:
在这里插入图片描述

一、普通命令

1.ZADD

  • 添加或者更新指定的元素以及关联的分数到 zset 中,分数应该符合 double 类型,+inf/-inf 作为正负极限也是合法的。

  • ZADD 的相关选项:

  • XX:仅仅用于更新已经存在的元素,不会添加新元素。(仅在member成员已存在时才更新分数。)

  • NX:仅用于添加新元素,不会更新已经存在的元素。(仅在member成员不存在时才添加)
    在这里插入图片描述

  • LT:表示只有当member成员 当前的分数 小于 新分数时,才会更新分数。
    换句话说,只有在新的分数大于现有分数时,才会进行更新,否则不会对该成员进行任何修改。

  • GT:表示只有当member成员 当前的分数 大于 新分数时,才会更新分数。
    换句话说,只由在新的分数小于现有分数时,才会进行更新,否则不会对该成员进行任何修改。

  • CH:默认情况下,ZADD 返回的是本次添加的元素个数,但指定这个选项之后,就会还包含本次更新的元素的个数。

  • INCR:此时命令类似 ZINCRBY 的效果,将元素的分数加上指定的分数。此时只能指定⼀个元素和分数。

  • 语法:

ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member...]
  • 添加元素的时候,既要添加 score 也要添加 member ,score和member称为是一个“pair”
  • 不要把 score 和 member 理解成“键值对”(key-value pair)
  • 对于有序集合来说,既可以通过 score 找到对应的 member ,也能通过 member 找到对应的 score
  • 命令有效版本:1.2.0 之后
  • 时间复杂度:O(log(N)) n是有序集合中已经有的元素个数,要求新增的元素,要放到合适的位置上(之所以log(N) 不是 N ,也是充分利用了有序这样的特点,当然zset 内部的数据结构,主要是调表)
  • 返回值:本次添加成功的元素个数。
  • 示例:
#分数如果相同的话,按照元素自身字符串的字典来排序
#zset有序集合内部 元素是按照升序来排列的
 127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> ZADD key 99 吕布 98 赵云 96 典韦 95 关羽
(integer) 4
#zrange 查看有序集合中元素的详情
#类似于 lrange 可以指定一对下标构成的区间
#有序集合,本身元素就有先后顺序的,因此就可以给这个有序集合赋予下标这样的概念
127.0.0.1:6379> ZRANGE key 0 -1
1) "\xe5\x85\xb3\xe7\xbe\xbd"
2) "\xe5\x85\xb8\xe9\x9f\xa6"
3) "\xe8\xb5\xb5\xe4\xba\x91"
4) "\xe5\x90\x95\xe5\xb8\x83"
# redis内部在存储数据的时候,是按照二进制方式进行存储的,这就意味着redis服务器不负责“字符编码”的
#要把二进制数据转化为 汉字,还需要客户端来进行支持~~
#redis-cli --raw 这样的命令进行处理
#ctrl + c 退出redis客户端
root@iZ2ze1wowvpkkp7wnart6oZ:~# redis-cli  --raw
127.0.0.1:6379> zrange key 0 -1
关羽
典韦
赵云
吕布

在这里插入图片描述

127.0.0.1:6379> zrange key 0 -1 withscores
关羽
95
典韦
96
赵云
98
吕布
99

在这里插入图片描述

127.0.0.1:6379> zadd key 97 赵云
0
127.0.0.1:6379> zrange key 0 -1
关羽
典韦
赵云
吕布
127.0.0.1:6379> zrange key 0 -1 withscores
关羽
95
典韦
96
赵云
97
吕布
99

在这里插入图片描述

127.0.0.1:6379> zadd key 10 吕布
0
127.0.0.1:6379> zrange key 0 -1 withscores
吕布
10
关羽
95
典韦
96
赵云
97

在这里插入图片描述

  • nx xx 的使用
127.0.0.1:6379> zadd key nx 94 张飞
1
127.0.0.1:6379> zrange key 0 -1 withscores
吕布
10
张飞
94
关羽
95
典韦
96
赵云
97
127.0.0.1:
评论 65
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值