redis中Zset有序集合类型常用命令

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合

不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员,集合的成员是唯一的,但是评分可以重复

因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素

下面介绍一些zset类型的常用命令

  • 添加键值对:zadd key score1 value1 score2 value2 score3 value3......,eg:
127.0.0.1:6379> zadd key1 1 k1v1 2 k1v2 3 k1v3
(integer) 3
  • 查询指定key对应zset指定范围值:zrange key 起始位置 结束位置(-1表示最后),eg:
127.0.0.1:6379> zrange key1 0 -1
1) "k1v1"
2) "k1v2"
3) "k1v3"
  • 查询指定key对应zset指定范围值和分数:zrange key 起始位置 结束位置(-1表示最后),eg:
127.0.0.1:6379> zrange key1 0 -1 withscores
1) "k1v1"
2) "1"
3) "k1v2"
4) "2"
5) "k1v3"
6) "3"
  • 查询指定key对应zset的socre在指定范围内的value(结果按socre从小到大排列):zrangebyscore key score1 score2 [withscores],(score1<score2)eg:
127.0.0.1:6379> zrange key1 0 -1 withscores
1) "k1v1"
2) "1"
3) "k1v2"
4) "2"
5) "k1v3"
6) "3"
127.0.0.1:6379> zrangebyscore key1 1 2
1) "k1v1"
2) "k1v2"
127.0.0.1:6379> zrangebyscore key1 1 2 withscores
1) "k1v1"
2) "1"
3) "k1v2"
4) "2"
# 结果按score从负无穷到正无穷排序
127.0.0.1:6379> zrangebyscore key1 -inf +inf
1) "k1v1"
2) "k1v2"
3) "k1v3"
# 结果按score从负无穷到正无穷排序并且显示score
127.0.0.1:6379> zrangebyscore key1 -inf +inf withscores
1) "k1v1"
2) "1"
3) "k1v2"
4) "2"
5) "k1v3"
6) "3"
  • 查询指定key对应zset的下标在指定范围内的value(结果按socre从大到小排列):zrevrange key 起始位置 结束位置 [withscores]
127.0.0.1:6379> zrange key1 0 -1 withscores
1) "k1v1"
2) "1"
3) "k1v2"
4) "2"
5) "k1v3"
6) "3"
127.0.0.1:6379> zrevrange key1 0 -1
1) "k1v3"
2) "k1v2"
3) "k1v1"
127.0.0.1:6379> zrevrange key1 0 -1 withscores
1) "k1v3"
2) "3"
3) "k1v2"
4) "2"
5) "k1v1"
6) "1"
  • 查询指定key对应zset的socre在指定范围内的value(结果按socre从大到小排列):zrevrangebyscore key score1 score2 [withscores],(score1>score2)eg:
127.0.0.1:6379> zrange key1 0 -1 withscores
1) "k1v1"
2) "1"
3) "k1v2"
4) "2"
5) "k1v3"
6) "3"
127.0.0.1:6379> zrevrangebyscore key1 3 1
1) "k1v3"
2) "k1v2"
3) "k1v1"
127.0.0.1:6379> zrevrangebyscore key1 3 1 withscores
1) "k1v3"
2) "3"
3) "k1v2"
4) "2"
5) "k1v1"
6) "1"
  • 删除指定key对应zset中的value:zrem key value1 value2 value3......,eg:
127.0.0.1:6379> zrange key1 0 -1
1) "k1v1"
2) "k1v2"
3) "k1v3"
127.0.0.1:6379> zrem key1 k1v1 k1v2
(integer) 2
127.0.0.1:6379> zrange key1 0 -1
1) "k1v3"
  • 查询指定key对应zset中的元素个数:zcard key,eg:
127.0.0.1:6379> zrange key1 0 -1
1) "k1v3"
127.0.0.1:6379> zcard key1
(integer) 1
  • 查询指定key对应zset中score在指定范围内的元素个数:zcount key score1 score2(score1<score2),eg:
127.0.0.1:6379> zrange key2 0 -1 withscores
1) "k2v1"
2) "100"
3) "k2v2"
4) "200"
5) "k2v3"
6) "300"
127.0.0.1:6379> zcount key2 100 200
(integer) 2
  • 将指定key对应zset的value对应score增加n:zincrby key n value,eg:
127.0.0.1:6379> zrange key2 0 -1 withscores
1) "k2v1"
2) "100"
3) "k2v2"
4) "200"
5) "k2v3"
6) "300"
127.0.0.1:6379> zincrby key2 1 k2v1
"101"
127.0.0.1:6379> zrange key2 0 -1 withscores
1) "k2v1"
2) "101"
3) "k2v2"
4) "200"
5) "k2v3"
6) "300"
  • 查询指定key对应zset的value的下标:zrank key value,eg:
127.0.0.1:6379> zrange key2 0 -1
1) "k2v1"
2) "k2v2"
3) "k2v3"
127.0.0.1:6379> zrank key2 k2v2
(integer) 1

记得快乐