服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Redis - Redis有序集合类型的常用命令小结

Redis有序集合类型的常用命令小结

2019-10-30 19:11daisy Redis

这篇文章先是给大家简单介绍了一下有序集合类型,然后详细整理了关于Redis有序集合类型的常用命令,通过整理的这些命令相信会给大家的工作或学习带来一定的帮助,有需要的朋友们下面来一起看看吧。

一、有序集合类型

有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序而已。Redis中的有序集合类型,实际上是在集合类型上,为每个元素都关联一个分数,有序实际上说的是分数有序,我们根据分数的范围获取集合及其他操作。集合的元素依然是不能够相同的,但是分数可以相同。

下面列举有序集合和类型和列表类型的相似处:

      ①两者都是有序的(废话!)

      ②两者都可以获得某一范围的元素

下面列举区别:

      ①列表是链表实现的,靠近两边的数据读取极快,而元素过多后获取中间元素的速度则会很慢;有序集合类型使用的散列表和跳跃表(Skip list)实现的,所以读取哪部分的数据都差不多(时间复杂度是O(logN))。

      ②列表中不能简单的调整元素的位置,但是有序集合可以(通过改变分数)。

      ③有序集合比列表费内存(要存储分数、散列、跳跃表)。

二、Redis有序集合的常用命令

Redis有序集合的常用命令有:zadd,zrange,zremrangebyrank,zremrangebyscore,zcard等,这些都是使用频率比较高的,还有一些参数的说明等。下面来看看一起看看吧。

1、ZADD命令

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

如果某个 member 已经是有序集的成员,那么更新这个 member score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

score 值可以是整数值或双精度浮点数。

先用zadd命令批量添加一些元素到有序集合中,后面的操作都是基于这个集合进行。

?
1
2
127.0.0.1:6379> zadd myzadd 1 a 2 b 3 c 4 d 5 e 6 f 7 d 8 e 9 f 10 tanteng.me
(integer) 7

如图所示:

Redis有序集合类型的常用命令小结

有序集合最特别的地方在于score,有了分值可以做很多事情,这个score不仅可以理解为分值,有时也会存时间戳,或者ip的整形形式,可以灵活运用。

2、ZRANGE命令

语法:ZRANGE key start stop [WITHSCORES]

zrange命令用于返回有序集合中给定区间的元素。start从0开始,stop是结束下标,如果是负数表示从倒数开始,-1倒数第一个,-2倒数第二个……

看下面的操作一目了然。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
127.0.0.1:6379> zrange myzadd 0 1
1) "a"
2) "b"
127.0.0.1:6379> zrange myzadd 0 5
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> zrange myzadd 1 5
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"
127.0.0.1:6379> zrange myzadd 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "tanteng.me"

加上WITHSCORES参数显示分值:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
127.0.0.1:6379> zrange myzadd 0 -1 WITHSCORES
 1) "a"
 2) "1"
 3) "b"
 4) "2"
 5) "c"
 6) "3"
 7) "d"
 8) "7"
 9) "e"
10) "8"
11) "f"
12) "9"
13) "tanteng.me"
14) "10"

3、ZREMRANGEBYRANK命令

语法:ZREMRANGEBYRANK key start stop

移除有序集中指定排名(rank)区间内的所有成员。start从0开始,stop可以为负数,表示倒过来第几位。

?
1
2
127.0.0.1:6379> zremrangebyrank myzadd 0 2
(integer) 3

执行这个命令就删除了前三个元素a,b,c.

4、ZREMRANGEBYSCORE命令

语法:ZREMRANGEBYSCORE key min max

移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。

?
1
2
127.0.0.1:6379> zremrangebyscore myzadd 7 8
(integer) 2

这样一来就把分值是7和8的元素d,e移除了.

ZREMRANGEBYRANKZREMRANGEBYSCORE从字面上很好理解,都是移除元素,一个根据下标,一个根据分值。

5、ZCARD命令

语法:ZCARD key

返回有序集合的基数。

?
1
2
127.0.0.1:6379> zcard myzadd
(integer) 2

经过前面的删除元素操作,现在只剩2个元素了。

6、ZCOUNT命令

语法:ZCOUNT key min max

ZCOUNT命令和ZCARD命令的不同是,ZCOUNT支持根据范围返回元素个数。

由于集合元素都差不多删没了,重新添加一组元素:

?
1
2
127.0.0.1:6379> zadd new 100 www.baidu.com 900 www.tanteng.me 12 www.yahoo.com 90 www.xunlei.com 88 www.juanpi.com
(integer) 5

如图所示:

Redis有序集合类型的常用命令小结

现在返回分值在80和100之间的成员数量。

?
1
2
127.0.0.1:6379> zcount new 80 100
(integer) 3

返回3个。

在Redis里面,还有个参数inf,-inf表示第一个成员,+inf表示最后一个。

?
1
2
127.0.0.1:6379> zcount new 80 +inf
(integer) 4

这里就返回4个数量,+inf这里表示没有限制最高分值的意思。

总结

以上就是关于Redis有序集合类型常用命令的全部内容,文章总结的还是很详细的,希望能对大家的学习或者工作带来一些便捷,如果有大家有疑问也可以留言交流,谢谢大家对服务器之家的支持。

延伸 · 阅读

精彩推荐
  • RedisRedis存取序列化与反序列化性能问题详解

    Redis存取序列化与反序列化性能问题详解

    这篇文章主要给大家介绍了关于Redis存取序列化与反序列化性能问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    这名字已经存在9742021-02-24
  • Redis在ssm项目中使用redis缓存查询数据的方法

    在ssm项目中使用redis缓存查询数据的方法

    本文主要简单的使用Java代码进行redis缓存,即在查询的时候先在service层从redis缓存中获取数据。如果大家对在ssm项目中使用redis缓存查询数据的相关知识感...

    caychen8962019-11-12
  • Redis就这?Redis持久化策略——AOF

    就这?Redis持久化策略——AOF

    今天为大家介绍Redis的另一种持久化策略——AOF。注意:AOF文件只会记录Redis的写操作命令,因为读命令对数据的恢复没有任何意义...

    头发茂密的刘叔4052021-12-14
  • Redis聊一聊Redis与MySQL双写一致性如何保证

    聊一聊Redis与MySQL双写一致性如何保证

    一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。本文给大家分享Redis与MySQL双写一致性该如何保证,感兴趣的朋友一...

    mind_programmonkey6432021-08-12
  • Redisredis启动,停止,及端口占用处理方法

    redis启动,停止,及端口占用处理方法

    今天小编就为大家分享一篇redis启动,停止,及端口占用处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    澄海单挑狂5152019-11-14
  • RedisRedis数据结构之链表与字典的使用

    Redis数据结构之链表与字典的使用

    这篇文章主要介绍了Redis数据结构之链表与字典的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    白泽来了4052021-08-03
  • RedisRedis分布式锁升级版RedLock及SpringBoot实现方法

    Redis分布式锁升级版RedLock及SpringBoot实现方法

    这篇文章主要介绍了Redis分布式锁升级版RedLock及SpringBoot实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以...

    等不到的口琴7802021-07-25
  • RedisLinux Redis 的安装步骤详解

    Linux Redis 的安装步骤详解

    这篇文章主要介绍了 Linux Redis 的安装步骤详解的相关资料,希望大家通过本文能掌握如何安装Redis,需要的朋友可以参考下 ...

    carl-zhao3822019-11-08