暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Redis每日一练(35):ZSCORE、ZINCRBY和ZRANK命令

原创 AlbertS 2020-01-10
3651

版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议

前言

今天继续学习有序集合的命令,今天这几个命令都和有序集合中元素分数有关,查询分数,修改分数,按分数排名等等,下面我们来详细看一下使用方法。

这篇笔记中的3个命令分别是 ZSCORE 、 ZINCRBY 、 ZRANK ,可以参考:

ZSCORE

  • 最早出现版本:1.2.0
  • 时间复杂度:O(1)
  • 命令参数:ZSCORE key member
  • 操作类型:sorted sets
  • 官方文档

作用

这个命令就是返回有序列表中指定元素的分数,当指定的键不存在或者元素不存在时会返回 nil。

练习

向有序集合中添加元素,然后使用 ZSCORE 命令查看元素的分数:

127.0.0.1:6379> DEL zset
(integer) 1
127.0.0.1:6379> ZSCORE zset name
(nil)
127.0.0.1:6379> ZADD zset 18 age
(integer) 1
127.0.0.1:6379> ZSCORE zset age
"18"
127.0.0.1:6379> ZSCORE zset name
(nil)
127.0.0.1:6379>

ZINCRBY

  • 最早出现版本:1.2.0
  • 时间复杂度:O(log(N)) (N是有序集合中的元素个数)
  • 命令参数:ZINCRBY key increment member
  • 操作类型:sorted sets
  • 官方文档

作用

增加有序列表中指定元素的分数,分数可以指定为负数,这时会减少元素原来的分数。

当指定的元素不存在时,会使用参数中 increment 的值作为分数,member 作为元素来增加一个元素,当指定的键也不存在时,会创建一个以指定键为名字的有序集合,然后增加一个值为 member ,分数为 increment 的元素。

当指定的键不是有序列表的类型,会给出报错信息,正常操作是会返回修改后的分数。

练习

试着对非有序集合操作查看报错信息:

127.0.0.1:6379> SET name albert
OK
127.0.0.1:6379> ZINCRBY name 1 age
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379>

操作不存在的有序集合和键,查看一下默认添加的情况,接着再修改分数:

127.0.0.1:6379> DEL zset
(integer) 1
127.0.0.1:6379> ZINCRBY zset 100 albert
"100"
127.0.0.1:6379> ZINCRBY zset 99 bells
"99"
127.0.0.1:6379> ZINCRBY zset 90 tom
"90"
127.0.0.1:6379> ZINCRBY zset 5 tom
"95"
127.0.0.1:6379> ZINCRBY zset -1 tom
"94"
127.0.0.1:6379> ZRANGE zset 0 -1 WITHSCORES
1) "tom"
2) "94"
3) "bells"
4) "99"
5) "albert"
6) "100"
127.0.0.1:6379>

ZRANK

  • 最早出现版本:2.0.0
  • 时间复杂度:O(log(N)) (N是有序集合中的元素个数)
  • 命令参数:ZRANK key member
  • 操作类型:sorted sets
  • 官方文档

作用

返回有序集合中元素的排名或者叫索引,顺序是从按照分数从小到大排列的,如果元素存在返回排名,否则返回 nil 。

排名是从0开始的,其实叫做索引更合适。

练习

向有序集合中添加多个元素,然后使用 ZRANK 命令查看元素排名:

127.0.0.1:6379> DEL zset
(integer) 1
127.0.0.1:6379> ZADD zset 100 albert 99 bella 92 tom
(integer) 3
127.0.0.1:6379> ZADD zset 98 boby
(integer) 1
127.0.0.1:6379> ZRANGE zset 0 -1
1) "tom"
2) "boby"
3) "bella"
4) "albert"
127.0.0.1:6379> ZRANGE zset 0 -1 WITHSCORES
1) "tom"
2) "92"
3) "boby"
4) "98"
5) "bella"
6) "99"
7) "albert"
8) "100"
127.0.0.1:6379> ZRANK zset boby
(integer) 1
127.0.0.1:6379> ZRANK zset bella
(integer) 2
127.0.0.1:6379> ZRANK zset abz
(nil)
127.0.0.1:6379>

总结

  1. ZSCORE 命令可以获取有序集合中指定元素的分数,若指定的元素不存在返回 nil。
  2. ZINCRBY 命令可以增加有序集合中指定元素的分数,当指定的分数为负数时相当于减少分数。
  3. ZRANK 命令可以查询有序集合中指定元素的排名,如果指定的元素不存在返回nil。

2020-1-10 22:50:36

最后修改时间:2020-01-12 22:50:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论