【Redis實戰】有序集合型別

碼農雲帆哥發表於2018-03-27

1、增加元素

  ZADD命令用來向有序集合中加入一個元素和該元素的分數,如果該元素已經存在則會用新的分數替換原有的分數。ZADD命令的返回值是新加入到集合中的元素個數(不包含之前已經存在的元素)。
  假設我們用有序集合模擬計分板,現在要記錄Tom、Peter和David三名運動員的分數(分別是89分、67分和100分):

127.0.0.1:6379> ZADD scoreboard 89 Tom 67 Peter 100 David
(integer) 3

  這時,我們發現Peter的分數錄入有誤,實際的分數應該是76分,可以用ZADD命令修改Peter的分數:

127.0.0.1:6379> ZADD scoreboard 76 Peter
(integer) 0

  分數不僅可以是整數,還支援雙精度浮點數:

127.0.0.1:6379> ZADD testboard 17E+307 a
(integer) 1
127.0.0.1:6379> ZADD testboard 1.5 b
(integer) 1
127.0.0.1:6379> ZADD testboard +inf c
(integer) 1
127.0.0.1:6379> ZADD testboard -inf d
(integer) 1

2、獲得元素的分數

127.0.0.1:6379> ZSCORE scoreboard Tom
"89"

3、獲得排名在某個範圍的元素列表

  ZRANGE命令會按照元素分數從小從大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)。ZRANGE命令與LRANGE命令十分相似,如索引都是從0開始,負數代表從後向前查詢(-1表示最後一個元素)。

127.0.0.1:6379> ZRANGE scoreboard 0 2
1) "Peter"
2) "Tom"
3) "David"
127.0.0.1:6379> ZRANGE scoreboard 1 -1
1) "Tom"
2) "David"

  如果需要同時獲得元素的分數的話可以在ZRANGE命令的尾數加上WITHSCORES引數,這時返回的資料格式就從“元素1,元素2,…,元素n”變為了“元素1,分數1,元素2,分數2,…,元素n,分數n”。

127.0.0.1:6379> ZRANGE scoreboard 0 -1 WITHSCORES
1) "Peter"
2) "76"
3) "Tom"
4) "89"
5) "David"
6) "100"

4、獲得指定分數範圍的元素

  ZRANGEBYSCORE命令引數雖然多,但是都很好理解。該命令按照元素分數從小到大的順序返回分數在min和max之間(包含min和max)的元素。

127.0.0.1:6379> ZRANGEBYSCORE scoreboard 80 100
1) "Tom"
2) "David"

  如果希望分數範圍不包含斷點值,可以在分數前加上“(”符號。例如,希望返回80分到100分的資料,可以含80分,但不包含100分,則稍微修改一下上面的命令即可:

127.0.0.1:6379> ZRANGEBYSCORE scoreboard 80 (100
1) "Tom"

  min和max還支援無窮大,同ZADD命令一樣,-inf和+inf分別表示負無窮和正無窮。比如你希望得到所有分數高於80分(不包含80分)的人的名單,但你卻不知道最高分是多少,這是就可以用上+inf了。

127.0.0.1:6379> ZRANGEBYSCORE scoreboard (80 +inf
1) "Tom"
2) "David"

  想獲得分數高於60分的從第二個人開始的3個人。

127.0.0.1:6379> ZADD scoreboard 56 Jerry 92 Wendy 67 Yvonne
(integer) 3
127.0.0.1:6379> ZRANGE scoreboard 0 -1 WITHSCORES
 1) "Jerry"
 2) "56"
 3) "Yvonne"
 4) "67"
 5) "Peter"
 6) "76"
 7) "Tom"
 8) "89"
 9) "Wendy"
10) "92"
11) "David"
12) "100"
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 60 +inf LIMIT 1 3
1) "Peter"
2) "Tom"
3) "Wendy"

  獲得分數低於或等於100分的前3個人。

127.0.0.1:6379> ZREVRANGEBYSCORE scoreboard 100 0 LIMIT 0 3
1) "David"
2) "Wendy"
3) "Tom"

5、增加某個元素的分數

  ZINCRBY命令可以增加一個元素的分數,返回值是更改後的分數。例如,想給Jerry加4分:

127.0.0.1:6379> ZINCRBY scoreboard 4 Jerry
"60"
127.0.0.1:6379> ZINCRBY scoreboard -4 Jerry
"56"

6、獲得集合中元素的數量

127.0.0.1:6379> ZCARD scoreboard
(integer) 6

7、獲得指定分數範圍內的元素個數

127.0.0.1:6379> ZCOUNT scoreboard 90 100
(integer) 2
127.0.0.1:6379> ZCOUNT scoreboard (89 +inf
(integer) 2

8、刪除一個或多個元素

127.0.0.1:6379> ZREM scoreboard Wendy
(integer) 1
127.0.0.1:6379> ZCARD scoreboard
(integer) 5

9、按照排名範圍刪除元素

  ZREMRANGEBYRANK命令按照元素分數從小到大的順序(即索引0表示最小的值)刪除處在指定排名範圍內的所有元素,並返回刪除的元素數量,如:

127.0.0.1:6379> ZADD testRem 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZREMRANGEBYRANK testRem 0 2
(integer) 3
127.0.0.1:6379> ZRANGE testRem 0 -1
1) "d"
2) "e"
3) "f"

10、按照分數範圍刪除元素

  ZREMRANGEBYSCORE命令來刪除指定分數範圍內的所有元素,引數min和max的特徵和ZRANGEBYSCORE命令中的一樣。返回值是刪除的元素數量。

127.0.0.1:6379> ZREMRANGEBYSCORE testRem (4 5
(integer) 1
127.0.0.1:6379> ZRANGE testRem 0 -1
1) "d"
2) "f"

11、獲得元素的排名

  ZRANK命令會按照元素分數從小到大的順序獲得指定的元素的排名(從0開始,即分數最小的元素排名為0)。ZRAVRANK命令則相反。

127.0.0.1:6379> ZRANGE scoreboard 0 -1
1) "Jerry"
2) "Yvonne"
3) "Peter"
4) "Tom"
5) "David"
127.0.0.1:6379> ZRANK scoreboard Peter
(integer) 2
127.0.0.1:6379> ZREVRANK scoreboard Peter
(integer) 2

相關文章