麦子学院 2017-04-22 20:50
Redis学习之有序集合类型的常用命令详解
回复:0 查看:2102
一、有序集合类型
有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序而已。Redis
中的有序集合类型,实际上是在集合类型上,为每个元素都关联一个分数,有序实际上说的是分数有序,我们根据分数的范围获取集合及其他操作。集合的元素依然是不能够相同的,但是分数可以相同。
下面列举有序集合和类型和列表类型的相似处:
①
两者都是有序的(废话!)
②
两者都可以获得某一范围的元素
下面列举区别:
①
列表是链表实现的,靠近两边的数据读取极快,而元素过多后获取中间元素的速度则会很慢;有序集合类型使用的散列表和跳跃表(
Skip list
)实现的,所以读取哪部分的数据都差不多(时间复杂度是
O(logN)
)。
②
列表中不能简单的调整元素的位置,但是有序集合可以(通过改变分数)。
③
有序集合比列表费内存(要存储分数、散列、跳跃表)。
二、Redis
有序集合的常用命令
Redis
有序集合的常用命令有:
zadd ,
zrange ,
zremrangebyrank ,
zremrangebyscore ,
zcard
等,这些都是使用频率比较高的,还有一些参数的说明等。下面来看看一起看看吧。
1
、
ZADD
命令
将一个或多个
member
元素及其
score
值加入到有序集
key
当中。
如果某个
member
已经是有序集的成员,那么更新这个
member
的
score
值,并通过重新插入这个
member
元素,来保证该
member
在正确的位置上。
score
值可以是整数值或双精度浮点数。
先用
zadd
命令批量添加一些元素到有序集合中,后面的操作都是基于这个集合进行。
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
如图所示:
有序集合最特别的地方在于
score
,有了分值可以做很多事情,这个
score
不仅可以理解为分值,有时也会存时间戳,或者ip
的整形形式,可以灵活运用。
2
、
ZRANGE
命令
语法:
ZRANGE key start stop [WITHSCORES]
zrange
命令用于返回有序集合中给定区间的元素。start
从
0
开始,
stop
是结束下标,如果是负数表示从倒数开始,
-1
倒数第一个,
-2
倒数第二个
……
看下面的操作一目了然。
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
参数显示分值:
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
可以为负数,表示倒过来第几位。
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 )
的成员。
127.0.0.1:6379>
zremrangebyscore
myzadd 7 8
(
integer) 2
这样一来就把分值是7
和
8
的元素
d,e
移除了
.
ZREMRANGEBYRANK
和
ZREMRANGEBYSCORE
从字面上很好理解,都是移除元素,一个根据下标,一个根据分值。
5
、
ZCARD
命令
语法:
ZCARD key
返回有序集合的基数。
127.0.0.1:6379>
zcard
myzadd
(
integer) 2
经过前面的删除元素操作,现在只剩2
个元素了。
6
、
ZCOUNT
命令
语法:
ZCOUNT key min max
ZCOUNT
命令和
ZCARD
命令的不同是,
ZCOUNT
支持根据范围返回元素个数。
由于集合元素都差不多删没了,重新添加一组元素:
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
如图所示:
现在返回分值在80
和
100
之间的成员数量。
127.0.0.1:6379>
zcount
new 80 100
(
integer) 3
返回3
个。
在Redis
里面,还有个参数
inf
,
-inf
表示第一个成员,
+inf
表示最后一个。
127.0.0.1:6379>
zcount
new 80 +
inf
(
integer) 4
这里就返回4
个数量,
+inf
这里表示没有限制最高分值的意思。
总结
以上就是关于Redis
有序集合类型常用命令的全部内容,文章总结的还是很详细的,希望能对大家的学习或者工作带来一些便捷,如果有大家有疑问也可以留言交流,谢谢大家对脚本之家的支持。
来源:Linux
视野
|