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

原创 2013年12月03日 17:13:56

一、简介

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"




Redis常用命令-Zset

Redis是一个速度非常快的非关系数据库,它可以存储键(key)与5种不同类型的值(value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还...
  • xiaouncle
  • xiaouncle
  • 2017年03月15日 21:09
  • 3094

初识redis之常用Set和ZSet命令

redis五种数据类型:String,Hash,List,Set,ZSet。五种数据类型各有优点,各司其职。最后两种数据类型Set和ZSet基本上是一种,ZSet就是给Set加了个排序而已(相当于加了...
  • js_sky
  • js_sky
  • 2015年11月18日 15:29
  • 1524

redis之有序集合类型(Zset)——排行榜的实现

Redis有序集合类似Redis集合存储在设定值唯一性。不同的是,一个有序集合的每个成员带有分数,用于以便采取有序set命令,从最小的到最大的分数有关。 Redis 有序set添加,删除和测试中的O(...
  • loophome
  • loophome
  • 2015年12月24日 14:57
  • 10930

RedisTemplate zSet的使用, 根据点赞排序,和创建时间排序2种方式

@Test public void test2(){ String key = "mls_AnswerIdsByQuersionId:"+123; redisCacheUtil.addZs...
  • lzt099
  • lzt099
  • 2017年08月01日 17:48
  • 565

redis取zset中score最大的member

1.zrange key start stop [withscores]   zrange key -1 -1 [withscores] 返回有序集 key 中,指定区间内的成员。 其中成员的...
  • chen199199
  • chen199199
  • 2016年01月18日 10:52
  • 5215

Redis常用命令-Zset

Redis是一个速度非常快的非关系数据库,它可以存储键(key)与5种不同类型的值(value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还...
  • xiaouncle
  • xiaouncle
  • 2017年03月15日 21:09
  • 3094

redis之有序集合类型(Zset)——排行榜的实现

Redis有序集合类似Redis集合存储在设定值唯一性。不同的是,一个有序集合的每个成员带有分数,用于以便采取有序set命令,从最小的到最大的分数有关。 Redis 有序set添加,删除和测试中的O(...
  • loophome
  • loophome
  • 2015年12月24日 14:57
  • 10930

【Redis源码剖析】 - Redis数据类型之有序集合zset

这周事情比较多,原本计划每周写两篇文章的看来是完不成了,今天为大家带来有序集合zset的源码分析。zset的源码主要涉及redis.h和t_zset.c两个文件,我们先来介绍一下zset底层用到的sk...
  • Xiejingfa
  • Xiejingfa
  • 2016年04月24日 14:59
  • 7215

初识redis之常用Set和ZSet命令

redis五种数据类型:String,Hash,List,Set,ZSet。五种数据类型各有优点,各司其职。最后两种数据类型Set和ZSet基本上是一种,ZSet就是给Set加了个排序而已(相当于加了...
  • js_sky
  • js_sky
  • 2015年11月18日 15:29
  • 1524

分布式内存数据库---Redis操作String、list、set、hash和Zset

Redis是一个Key-Value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类...
  • chenfengdejuanlian
  • chenfengdejuanlian
  • 2017年01月18日 16:10
  • 2086
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NoSQL之Redis对zset(有序集合)数据类型的操作
举报原因:
原因补充:

(最多只允许输入30个字)