【Redis實戰】有序集合型別
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
相關文章
- 《Redis實戰》筆記-Redis的有序集合Redis筆記
- redis之有序集合型別(Zset)——排行榜的實現Redis型別
- Redis五大資料型別之 Zset(有序集合)Redis大資料資料型別
- redis有序集合Redis
- Redis 設計與實現 10:五大資料型別之有序集合Redis大資料資料型別
- redis有序集合實現實時排名Redis
- Redis有序集合原理Redis
- Redis有序集合物件Redis物件
- Redis有序集合操作Redis
- Redis有序集合命令Redis
- Python–Redis實戰:第三章:Redis命令:第五節:有序集合PythonRedis
- Redis有序集合詳解Redis
- Redis有序集合學習Redis
- Redis物件——有序集合(ZSet)Redis物件
- 《閒扯Redis十一》Redis 有序集合物件底層實現Redis物件
- Redis雜湊與有序集合Redis
- redis學習之有序集合Redis
- php操作redis,有序集合zsetPHPRedis
- redis 有序集合(sorted set)(redis學習七)Redis
- Redis 有序集合(zset)命令詳解Redis
- 使用Redis的有序集合實現排行榜功能Redis
- Redis 入門指南九:Redis 有序集合(sorted set)Redis
- Python&Redis 無序集合set、有序集合zset操作PythonRedis
- 使用 Redis 有序集合實現 IP 歸屬地查詢Redis
- Redis實戰解讀-初識Redis&Redis基本資料型別Redis資料型別
- [Redis 系列]redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- 【Redis 系列】redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- PHP+Redis 有序集合實現 24 小時排行榜實時更新PHPRedis
- Redis五大資料型別之 Set(集合)Redis大資料資料型別
- Redis中7種集合型別應用場景Redis型別
- Guava集合--新集合型別Guava型別
- Redis 設計與實現 9:五大資料型別之集合Redis大資料資料型別
- 面試官:Redis中有序集合的內部實現方式是什麼?面試Redis
- List型別集合型別
- redis——集合,有序,慢查詢, pipline與事務, bitmap ,HyperLogLog geoRedis
- redis~有序集合處理ip範圍的查詢問題Redis
- python 集合型別 setPython型別
- Redis 實戰篇:巧用資料型別實現億級資料統計Redis資料型別