Redis 有序集合(sorted set)
Redis 有序集合(sorted set)
Redis 有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
有序集合的成員是唯一的,但分數(score)卻可以重複。
集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可儲存40多億個成員)。
例項
redis 127.0.0.1:6379> ZADD w3ckey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD w3ckey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE w3ckey 0 10 WITHSCORES
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
在以上例項中我們通過命令 ZADD 向 redis 的有序集合中新增了三個值並關聯上分數。
Redis 有序集合命令
下表列出了 redis 有序集合的基本命令:
1、ZADD key score1 value1 [score2 value2]
將一個或多個成員元素及其分數值加入到有序集當中。
如果某個成員已經是有序集的成員,那麼更新這個成員的分數值,並通過重新插入這個成員元素,來保證該成員在正確的位置上。
分數值可以是整數值或雙精度浮點數。如果有序集合 key 不存在,則建立一個空的有序集並執行 ZADD 操作。當 key 存在但不是有序集型別時,返回一個錯誤。
例:redis 127.0.0.1:6379> ZADD myset 2 "world" 3 "bar"
(integer) 2
2 zcard key
獲取有序集合的成員個數,當 key 存在且是有序集型別時,返回有序集的成員個數。 當 key 不存在時,返回 0 。
3 zcount key min max
計算在有序集合中指定區間分數的成員個數,分數值在 min 和 max 之間的成員的數量。
4 zincrby key increment member
有序集合中對指定成員的分數加上增量 increment , 可以通過傳遞一個負數值 increment ,讓分數減去相應的值,比如 ZINCRBY key -5 member ,就是讓 member 的 score 值減去 5 。當 key 不存在,或分數不是 key 的成員時, ZINCRBY key increment member
等同於 ZADD key increment member 。
當 key 不是有序集型別時,返回一個錯誤。
分數值可以是整數值或雙精度浮點數。
5 zinterstore destination numkeys key [key ...]
計算給定的一個或多個有序集的交集並將結果集儲存在新的有序集合destination
中,其中給定 key 的數量必須以 numkeys 引數指定,並將該交集(結果集)儲存到 destination 。預設情況下,結果集中某個成員的分數值是所有給定集下該成員分數值之和(交的是集合成員)。
6 zlexcount key min max
在有序集合中計算指定字典區間內成員數量,分數小的成員放前邊,成員前有中括號
例:
<span style="font-size:18px;">redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> ZADD myzset 0 f 0 g
(integer) 2
redis 127.0.0.1:6379> ZLEXCOUNT myzset - +
(integer) 7
redis 127.0.0.1:6379> ZLEXCOUNT myzset [b [f
(integer) 5</span>
7 zrange key start stop [withscores]
通過索引區間返回有序集合成指定區間內的成員,Redis Zrange 返回有序集中(升序),指定區間內的成員。
其中成員的位置按分數值遞增(從小到大)來排序。具有相同分數值的成員按字典序(lexicographical order )來排列。
如果你需要成員按值遞減(從大到小)來排列,請使用 zrevrange 命令。下標引數 start 和 stop 都以 0 為底,也就是說,以 0 表示有序集第一個成員,以 1 表示有序集第二個成員,以此類推。你也可以使用負數下標,以 -1 表示最後一個成員, -2 表示倒數第二個成員,以此類推。帶withscores顯示集合成員及其分數,不帶則只顯示集合成員。
例:
<span style="font-size:18px;">redis 127.0.0.1:6379> ZRANGE salary 1 2 WITHSCORES # 顯示有序集下標區間 1 至 2 的成員
1) "tom"
2) "5000"
3) "boss"
4) "10086"</span>
8 zrangebylex key min max [limit offset count]
通過字典區間返回有序集合的成員
例:
<span style="font-size:18px;">redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
redis 127.0.0.1:6379> ZRANGEBYLEX myzset - [c
1) "a"
2) "b"
3) "c"
redis 127.0.0.1:6379> ZRANGEBYLEX myzset - (c
1) "a"
2) "b"
redis 127.0.0.1:6379> ZRANGEBYLEX myzset [aaa (g
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"
redis> </span>
注意中括號和小括號的區別,中括號包含,小括號不包含9 zrangebyscore key min max [withscores] [limit]
通過分數返回有序集合指定區間內的成員,有序整合員按分數值遞增(從小到大)次序排列。
具有相同分數值的成員按字典序來排列(該屬性是有序集提供的,不需要額外的計算)。
預設情況下,區間的取值使用閉區間 (小於等於或大於等於),你也可以通過給引數前增加 ( 符號來使用可選的開區間 (小於或大於)。
例:
<span style="font-size:18px;">redis 127.0.0.1:6379> ZADD salary 2500 jack # 測試資料
(integer) 0
redis 127.0.0.1:6379> ZADD salary 5000 tom
(integer) 0
redis 127.0.0.1:6379> ZADD salary 12000 peter
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf # 顯示整個有序集
1) "jack"
2) "tom"
3) "peter"
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf WITHSCORES # 顯示整個有序集及成員的 score 值
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf 5000 WITHSCORES # 顯示工資 <=5000 的所有成員
1) "jack"
2) "2500"
3) "tom"
4) "5000"
redis 127.0.0.1:6379> ZRANGEBYSCORE salary (5000 400000 # 顯示工資大於 5000 小於等於 400000 的成員
1) "peter"</span>
10 zrank key member
返回有序集合中指定成員的索引,返回有序集中指定成員的排名。其中有序整合員按分數值遞增(從小到大)順序排列。例:
<span style="font-size:18px;">redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 顯示所有成員及其 score 值
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
redis 127.0.0.1:6379> ZRANK salary tom # 顯示 tom 的薪水排名,第二
(integer) 1</span>
11 zrem key member [member ...]
移除有序集合中的一個或多個成員,Redis Zrem 命令用於移除有序集中的一個或多個成員,不存在的成員將被忽略。當 key 存在但不是有序集型別時,返回一個錯誤。
12 zremrangebylex key min max
移除有序集合中給定的字典區間的所有成員,例:
redis 127.0.0.1:6379> ZADD myzset 0 aaaa 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> ZADD myzset 0 foo 0 zap 0 zip 0 ALPHA 0 alpha
(integer) 5
redis 127.0.0.1:6379> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "alpha"
4) "b"
5) "c"
6) "d"
7) "e"
8) "foo"
9) "zap"
10) "zip"
redis 127.0.0.1:6379> ZREMRANGEBYLEX myzset [alpha [foo
(integer) 6
redis 127.0.0.1:6379> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"
4) "zip"
redis>
13 zremrangebyrank key start stop
移除有序集合中給定的排名區間的所有成員
14 zremrangebyscore key min max
移除有序集合中給定的分數區間的所有成員
15 zrevrange key start stop [WITHSCORES]
返回有序集中指定區間內的成員,通過索引,分數從高到底,具有相同分數值的成員按字典序的逆序(reverse lexicographical order)排列。除了成員按分數值遞減的次序排列這一點外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一樣。例:
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 遞增排列
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
redis 127.0.0.1:6379> ZREVRANGE salary 0 -1 WITHSCORES # 遞減排列
1) "jack"
2) "5000"
3) "tom"
4) "4000"
5) "peter"
6) "3500"
16 zrevrangebyscore key max min [WITHSCORES]
返回有序集中指定分數區間內的成員,分數從高到低排序
17 zrevrank key member
返回有序集合中指定成員的排名,有序整合員按分數值遞減(從大到小)排序
18 zscore key member
返回有序集中,成員的分數值,如果成員元素不是有序集 key 的成員,或 key 不存在,返回 nil 。
19 zunionstore destination numkeys key [key ...]
計算給定的一個或多個有序集的並集,其中給定 key 的數量必須以 numkeys 引數指定,並將該並集(結果集)儲存到 destination 。預設情況下,結果集中某個成員的分數值是所有給定集下該成員分數值之和 。
20 zscan key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成員和元素分值),返回的每個元素都是一個有序集合元素,一個有序集合元素由一個成員(member)和一個分值(score)組成。
相關文章
- Redis的有序集合(sorted set)Redis
- redis 有序集合(sorted set)(redis學習七)Redis
- Redis 入門指南九:Redis 有序集合(sorted set)Redis
- redis原始碼分析(七)、redis命令學習總結—Redis 有序集合(sorted set)Redis原始碼
- Redis 入門 - 3(集合 set、有序集合 sort set)Redis
- redis有序集合型別sort setRedis型別
- Python&Redis 無序集合set、有序集合zset操作PythonRedis
- redis有序集合Redis
- Redis 有序集合Redis
- [Redis 系列]redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- 【Redis 系列】redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- Redis有序集合命令Redis
- Redis有序集合物件Redis物件
- Redis有序集合操作Redis
- Redis有序集合原理Redis
- Redis有序集合詳解Redis
- Redis物件——有序集合(ZSet)Redis物件
- Redis有序集合學習Redis
- Redis-Redis實戰(有序集合)Redis
- redis 簡單使用(Sorted-Set)Redis
- redis-10.sorted_set型別Redis型別
- redis學習之有序集合Redis
- php操作redis,有序集合zsetPHPRedis
- Redis雜湊與有序集合Redis
- (免費領取紅包封面)【Redis 系列】redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- (免費領取紅包封面)[Redis 系列]redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- 《Redis實戰》筆記-Redis的有序集合Redis筆記
- Redis 有序集合(zset)命令詳解Redis
- 【Redis實戰】有序集合型別Redis型別
- go操作redis的有序集合(zset)GoRedis
- Redis的集合型別(Set)Redis型別
- 【Redis 系列】redis 學習十四,sorted_set 初步探究梳理Redis
- redis有序集合實現實時排名Redis
- Redis 資料庫之有序集合(zset)Redis資料庫
- Redis 中的 set 和 sorted set 如何使用,原始碼實現分析Redis原始碼
- 《閒扯Redis十一》Redis 有序集合物件底層實現Redis物件
- Redis基礎系列-0x007:Sorted SetRedis
- Redis有序集合命令ZREVRANGEBYSCORE詳解與應用RedisVR