您的位置:首页 > 数据库 > Redis

NoSQL之Redis对zset(有序集合)数据类型的操作

2013-12-03 17:13 771 查看
一、简介

Sorted set(zset)是set的升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新得值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。

二、有序集合的操作方法

下面score是按顺序操作而rank是按索引操作

1.zadd key score member:向名称为key的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序。

127.0.0.1:6379> zadd zsetkey 1 'one'

(integer) 1

127.0.0.1:6379> zadd zsetkey 2 'two'

(integer) 1

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "2"

127.0.0.1:6379> zadd zsetkey 3 'two'

(integer) 0

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "3"


zadd zsetkey 3 'two'这条语句代表更新失败,但是顺序号已经改变

这里需要注意score必须是整数,不能是字符型。



2.zrange zsetkey start end withscores:获取zsetkey的有序集合的数字,从start取到end,并且附上顺序号。若不加withscores那么不附加顺序号

127.0.0.1:6379> zrange zsetkey 0 -1

1) "one"

2) "two"


3.zrem zsetkey member:删除zsetkey中的member元素。返回1代表删除成功

127.0.0.1:6379> zrem zsetkey two

(integer) 1

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "one"

2) "1"



4.zincrby zsetkey incrment member:如果在名称为zsetkey的zset中已经存在元素member,那么该元素的score增加Increment否则向该集合中添加该元素,其score的值为Increment。若成功返回的是member增长之后的序列号。

127.0.0.1:6379> zadd zsetkey 3 'three'

(integer) 1

127.0.0.1:6379> zincrby zsetkey 1 one

"2"

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "one"

2) "2"

3) "two"

4) "2"

5) "three"

6) "3"

127.0.0.1:6379> zincrby zsetkey 3 one

"5"

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "two"

2) "2"

3) "three"

4) "3"

5) "one"

6) "5"


从上面的例子可以看出,序列号可以相同,类似二维数组。

5.zrank zsetkey member:返回名称为zsetkey的zset中member元素的索引值(按score从小到大排序)即下标。返回的时索引值

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "two"

2) "2"

3) "three"

4) "3"

5) "one"

6) "5"

127.0.0.1:6379> zrank zsetkey three

(integer) 1

127.0.0.1:6379> zrank zsetkey one

(integer) 2


three和one的索引分别是1和2.

6.zrevrank zsetkey member:返回名称为zsetkey的zset中的member元素的索引值(按score从大到小排序)。

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "two"

2) "2"

3) "three"

4) "3"

5) "one"

6) "5"

127.0.0.1:6379> zrevrank zsetkey one

(integer) 0

127.0.0.1:6379> zrevrank zsetkey three

(integer) 1


7.zrevrange zsetkey start end:按从大到小的顺序,从zsetkey中从start取到end。

127.0.0.1:6379> zrevrange zsetkey 0 -1 withscores

1) "one"

2) "5"

3) "three"

4) "3"

5) "two"

6) "2"


8.zrangebyscore zsetkey start end:返回集合中给定score区间内的值

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "two"

2) "2"

3) "three"

4) "3"

5) "four"

6) "4"

7) "five"

8) "5"

9) "one"

10) "5"


127.0.0.1:6379> zrangebyscore zsetkey 3 5 withscores

1) "three"

2) "3"

3) "four"

4) "4"

5) "five"

6) "5"

7) "one"

8) "5"


这个和zrange最大的区别就是范围值是存储的key值而不是默认的整形索引值。

9.zcount zsetkey start end:返回给定范围内的members数量

127.0.0.1:6379> zcount zsetkey 3 5

(integer) 4


4个,没有问题

10.zcard zsetkey:返回zsetkey中所有元素的个数

127.0.0.1:6379> zcard zsetkey

(integer) 5


11.zremrangebyrank zsetkey start end :删除集合内给定区间内的元素

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "two"

2) "2"

3) "three"

4) "3"

5) "four"

6) "4"

7) "five"

8) "5"

9) "one"

10) "5"

127.0.0.1:6379> zremrangebyrank zsetkey 1 3

(integer) 3

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "two"

2) "2"

3) "one"

4) "5"


上面的操作删除了zsetkey中索引从1到3的,也就是three four five。

12.zremrangebyscore zsetkey start end:按顺序删除zsetkey中给定范围内的元素(按顺序而不是按所以删除)

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "one"

2) "1"

3) "two"

4) "2"

5) "three"

6) "3"

7) "four"

8) "4"

127.0.0.1:6379> zremrangebyscore zsetkey 2 3

(integer) 2

127.0.0.1:6379> zrange zsetkey 0 -1 withscores

1) "one"

2) "1"

3) "four"

4) "4"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: