Redis 的命令详解 - Sorted Set 篇

本文详细介绍了Redis中的Sorted Set数据结构及其相关命令,包括ZADD、ZSCORE、ZREM、ZREMRANGEBYSCORE、ZREMRANGEBYRANK、ZINCRBY等操作。这些命令用于添加、删除、获取成员分数、范围操作以及更新成员分数,展示了Sorted Set的排序特性和使用场景。
摘要由CSDN通过智能技术生成

Sorted Set 命令详解

跟 SET 相关的命令一共有 25 种,这里只介绍常用的

ZADD : 添加成员

起始版本 : 1.2.0
时间复杂度 : O(log(N)),其中N是有序集合中的元素数。

向有序集合(sorted set)中,添加 分数/成员(score/member)对,可以同时指定多个分数/成员(score/member)对。

分数值是一个带符号带双精度浮点型数字字符串。

  • 如果指定的成员已经在有序集合中,则会更新改成员的分数(scrore)并更新到正确的排序位置。
  • 如果key不存在,将会创建一个新的有序集合(sorted set)并将分数/成员(score/member)对添加到有序集合。

历史

redis 版本 >= 2.4 时,ZADD 命令接受多个成员。 在Redis 2.4以前,ZADD 命令只能添加或者更新一个成员。

语法

ZADD key [NX|XX] [CH] [INCR] score1 member1 [score2 member2 ...]

score 是分数,放在前面 member 是成员

ZADD 参数

redis 版本 >= Redis 3.0.2时, ZADD支持以下参数

  • XX : 只更新存在的成员,不添加新成员。
  • NX : 不更新存在的成员。只添加新成员。
  • INCR : 当指定这个参数时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作,在此模式下只能指定一对分数/成员。
  • CH : 这个参数有点意思,它的作用是改变返回值!!!
    • 没有指定该参数时(默认情况下),返回的是新添加成员的总数,发生更新的成员不进行计数。
    • 指定该参数后,返回的是发生变化的成员总数,即新添加的成员 + 发生更新的成员。(注意,如果一个成员已存在,并且分数也相同,则不会发生更新)

返回值

  • 如果key存在,但是类型不是有序集合,将会返回一个错误应答。
  • 如果指定了,INCR 参数,返回运算后的新分数
  • 如果指定了,CH 参数, 返回的是发生变化的成员总数
  • 同时指定 INCRCH 参数,只要 INCR 生效,返回运算后的新分数
  • 即没有指定 INCR 参数,又没有指定 CH 参数,返回新添加的成员总数

分数可以精确的表示的整数的范围

Redis 有序集合的分数使用双精度64位浮点数。我们支持所有的架构,这表示为一个IEEE 754 floating point number,它能包括的整数范围是-(2^53) 到 +(2^53)。或者说是-9007199254740992 到 9007199254740992。更大的整数在内部用指数形式表示,所以,如果为分数设置一个非常大的整数,你得到的是一个近似的十进制数。

分数和排序

Sorted Set 按照分数递增的方式进行排序。且不允许存在重复的成员。

分数可以通过ZADD命令进行更新,也可以通过ZINCRBY命令来修改之前的值,分数变化后,对应的成员的排序位置也会随之改变。

获取一个成员当前的分数可以使用ZSCORE命令,也可以用它来验证成员是否存在。

相同分数的成员

有序集合里面的成员是不能重复的,但是不同成员间有可能有相同的分数。当多个成员有相同的分数时,将进行字典排序(ordered lexicographically)。

字典顺序排序用的是二进制,它比较的是字符串的字节数组。

如果用户将所有元素设置相同分数(例如0),有序集合里面的所有元素将按照字典顺序进行排序,范围查询元素可以使用ZRANGEBYLEX命令

ZSCORE : 获取成员的分数

起始版本 : 1.2.0
时间复杂度 : O(1)

语法

ZSCORE key member

返回值

成员的分数,成员不存在返回nil

ZREM : 删除成员

起始版本 : 1.2.0
时间复杂度 : O(M*log(N)),其中N是有序集合中的元素数,M是要删除的元素数。

删除指定的成员key,不存在的成员将被忽略。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值