微信扫一扫

028-83195727 , 15928970361
business@forhy.com

跟我学Redis(8)—sorted set类型及操作

redis,sorted set2016-07-31

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

和set一样 sorted set 也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。sorted set的实现是skip list和hash table的混合体。 

zadd

向key对应的zset中添加element,score用于排序。如果该element已经存在,则根据score更新该element的顺序

语法:zadd key score element

redis 127.0.0.1:6379> zadd myzset 1 "one" 
(integer) 1 
redis 127.0.0.1:6379> zadd myzset 2 "two" 
(integer) 1 
redis 127.0.0.1:6379> zadd myzset 3 "two" 
(integer) 0 
redis 127.0.0.1:6379> zrange myzset 0 -1 withscores 
1) "one" 
2) "1" 
3) "two" 
4) "3" 
redis 127.0.0.1:6379> 

zrem

删除key对应的zset中的element

语法:zrem key element

redis 127.0.0.1:6379> zrange myzset 0 -1 withscores 
1) "one" 
2) "1" 
3) "two" 
4) "3" 
redis 127.0.0.1:6379> zrem myzset two 
(integer) 1 
redis 127.0.0.1:6379> zrange myzset 0 -1 withscores 
1) "one"
2) "1" 
redis 127.0.0.1:6379> 

zincrby

如果key对应的zset中已经存在element,则该element的score增加increment;否则向集合中添加该element,其score的值为increment 

语法:zincrby key increment element

redis 127.0.0.1:6379> zadd myzset2 1 
"one" (integer) 1 
redis 127.0.0.1:6379> zadd myzset2 2 
"two" (integer) 1 
redis 127.0.0.1:6379> zincrby myzset2 2 "one" "3" 
redis 127.0.0.1:6379> zrange myzset2 0 -1 withscores 
1) "two" 
2) "2" 
3) "one" 
4) "3" 
redis 127.0.0.1:6379> 

zrank

返回key对应的zset中element的排名(按score从小到大排序),即下标

语法:zrank key element

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores 
1) "one" 
2) "1" 
3) "two" 
4) "2" 
5) "three" 
6) "3" 
7) "five" 
8) "5" 
redis 127.0.0.1:6379> zrank myzset3 two 
(integer) 1 
redis 127.0.0.1:6379> 

zrange

获取key对应的zset的element

zrange key start end [withscores]

zrevrank

返回key对应的zset中element的排名(按score从大到小排序),即下标

语法:zrevrank key element

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores 
1) "one" 
2) "1" 
3) "two" 
4) "2" 
5) "three" 
6) "3" 
7) "five" 
8) "5" 
redis 127.0.0.1:6379> zrevrank myzset3 two 
(integer) 2 
redis 127.0.0.1:6379> 

zrevrange

和zrange相反排序输出

语法:zrevrange key start end [withscores]

redis 127.0.0.1:6379> zrevrange myzset3 0 -1 withscores 
1) "five" 
2) "5" 
3) "three" 
4) "3" 
5) "two" 
6) "2" 
7) "one" 
8) "1" 
redis 127.0.0.1:6379> 

zrangebyscore

返回key对应zset中score在给定区间的元素(闭区间)

语法:zrangebyscore key min_score max_socre [withcores]

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores 
1) "one" 
2) "1" 
3) "two" 
4) "2" 
5) "three" 
6) "3" 
7) "five" 
8) "5" 
redis 127.0.0.1:6379> zrangebyscore myzset3 2 3 withscores 
1) "two" 
2) "2" 
3) "three" 
4) "3" 
redis 127.0.0.1:6379> 

zrevrangebyscore

返回key对应zset中score在给定区间的元素

语法:zrevrangebyscore key max_score min_socre [withcores]

redis 127.0.0.1:6379> zremrangebyscore myzset3 1 2 
(integer) 2 
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores 
1) "three" 
2) "3" 
redis 127.0.0.1:6379> 

zcount

返回key对应zset中score在给定区间的数量

语法:zcount key min_score max_score [withcores] 

redis 127.0.0.1:6379> zcount myzset3 2 3 
(integer) 2 
redis 127.0.0.1:6379> 

zscore

返回给定元素对应的score

语法:zscore key element

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores 
1) "one" 
2) "1" 
3) "two" 
4) "2" 
5) "three" 
6) "3" 
7) "five" 
8) "5" 
redis 127.0.0.1:6379> zscore myzset3 two 
"2" 
redis 127.0.0.1:6379>

zremrangebyrank

删除key对应zset中排名在给定下标区间的元素

语法:zremrangebyrank key start_index end_index [withscores] 

redis 127.0.0.1:6379> zremrangebyrank myzset3 3 
3 (integer) 1 
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores 
1) "one" 
2) "1" 
3) "two" 
4) "2" 
5) "three" 
6) "3" 
redis 127.0.0.1:6379> 

zremrangebyscore

删除key对应zset中score在给定区间的元素

语法:zremrangebyscore key min_score max_score [withscores]

redis 127.0.0.1:6379> zremrangebyscore myzset3 1 
2 (integer) 2 
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores 
1) "three" 
2) "3" 
redis 127.0.0.1:6379> 


到这里Redis的基本类型以及操作介绍完毕。

后面开始介绍Redis服务器的命令。





   扫一扫,通过微信也能学习


   扫一扫,通过微信也能学习