源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-07-11 03:01 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Redis有序集合类型的常用命令小结
[b]一、有序集合类型[/b] 有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序而已。Redis中的有序集合类型,实际上是在集合类型上,为每个元素都关联一个分数,有序实际上说的是分数有序,我们根据分数的范围获取集合及其他操作。集合的元素依然是不能够相同的,但是分数可以相同。 [b]下面列举有序集合和类型和列表类型的相似处:[/b]       ①两者都是有序的(废话!)       ②两者都可以获得某一范围的元素 [b]下面列举区别:[/b]       ①列表是链表实现的,靠近两边的数据读取极快,而元素过多后获取中间元素的速度则会很慢;有序集合类型使用的散列表和跳跃表(Skip list)实现的,所以读取哪部分的数据都差不多(时间复杂度是O(logN))。       ②列表中不能简单的调整元素的位置,但是有序集合可以(通过改变分数)。       ③有序集合比列表费内存(要存储分数、散列、跳跃表)。 [b]二、Redis有序集合的常用命令[/b] Redis有序集合的常用命令有:[code]zadd[/code],[code]zrange[/code],[code]zremrangebyrank[/code],[code]zremrangebyscore[/code],[code]zcard[/code]等,这些都是使用频率比较高的,还有一些参数的说明等。下面来看看一起看看吧。 [b]1、ZADD命令[/b] 将一个或多个 [code]member [/code]元素及其 [code]score [/code]值加入到有序集 [code]key [/code]当中。 如果某个 [code]member [/code]已经是有序集的成员,那么更新这个 [code]member [/code]的 [code]score [/code]值,并通过重新插入这个 [code]member [/code]元素,来保证该 [code]member [/code]在正确的位置上。 [code]score [/code]值可以是整数值或双精度浮点数。 先用[code]zadd[/code]命令批量添加一些元素到有序集合中,后面的操作都是基于这个集合进行。
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
如图所示: [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100140_0_12863.jpg[/img] 有序集合最特别的地方在于[code]score[/code],有了分值可以做很多事情,这个[code]score[/code]不仅可以理解为分值,有时也会存时间戳,或者ip的整形形式,可以灵活运用。 [b]2、ZRANGE命令[/b] 语法:[code]ZRANGE key start stop [WITHSCORES][/code] [code]zrange[/code]命令用于返回有序集合中给定区间的元素。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"
加上[code]WITHSCORES[/code]参数显示分值:
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"
[b]3、ZREMRANGEBYRANK命令[/b] 语法:[code]ZREMRANGEBYRANK key start stop[/code] 移除有序集中指定排名(rank)区间内的所有成员。start从0开始,stop可以为负数,表示倒过来第几位。
127.0.0.1:6379> zremrangebyrank myzadd 0 2
(integer) 3
执行这个命令就删除了前三个元素a,b,c. [b]4、ZREMRANGEBYSCORE命令[/b] 语法:[code]ZREMRANGEBYSCORE key min max[/code] 移除有序集 [code]key [/code]中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
127.0.0.1:6379> zremrangebyscore myzadd 7 8
(integer) 2
这样一来就把分值是7和8的元素d,e移除了. [code]ZREMRANGEBYRANK[/code]和[code]ZREMRANGEBYSCORE[/code]从字面上很好理解,都是移除元素,一个根据下标,一个根据分值。 [b]5、ZCARD命令[/b] 语法:[code]ZCARD key[/code] 返回有序集合的基数。
127.0.0.1:6379> zcard myzadd
(integer) 2
经过前面的删除元素操作,现在只剩2个元素了。 [b]6、ZCOUNT命令[/b] 语法:[code]ZCOUNT key min max[/code] [code]ZCOUNT[/code]命令和[code]ZCARD[/code]命令的不同是,[code]ZCOUNT[/code]支持根据范围返回元素个数。 由于集合元素都差不多删没了,重新添加一组元素:
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
如图所示: [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100140_1_55420.jpg[/img] 现在返回分值在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这里表示没有限制最高分值的意思。 [b]总结[/b] 以上就是关于Redis有序集合类型常用命令的全部内容,文章总结的还是很详细的,希望能对大家的学习或者工作带来一些便捷,如果有大家有疑问也可以留言交流,谢谢大家对编程素材网的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部