Swift51.com
麦子学院 头像
麦子学院  2017-04-22 20:50

Redis学习之有序集合类型的常用命令详解

回复:0  查看:2102  
本文和大家分享的主要是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  命令批量添加一些元素到有序集合中,后面的操作都是基于这个集合进行。
  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 倒数第二个 ……
  看下面的操作一目了然。
 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
  如图所示:
Redis学习之有序集合类型的常用命令详解
  现在返回分值在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 视野