和set類型一樣,sorted set也是string類型元素的集合,因為元素是有序的,所以使用有序集合你可以以非常快的速度(O(log(N)))添加,刪除和更新元素,它也很擅長排序。
應用情境:擷取網站中點擊量最高的前n篇文章,等等。
為了詳細的解釋下面每個命令,先擬定一個應用情境;假設用sorted set記錄網站每篇文章的點擊量,如果key為artHits,則:
1.【 zadd key v k 】 往key中添加一個元素,k為鍵,v為值。如:zadd artHits 99 12表示id為12的文章點擊量為99次。
2.【 zrange key start end 】 根據v的值由小到大進行排序來獲得start到end之間的元素。
註:0表示第一個元素,-1表示最後一個元素,-2表示倒數第二個元素,以此類推,如果要擷取第一個到倒數第三個之間的元素,命令為:zrange key 0 -3。
3.【 zrevrange key start end 】 同上,根據v的值由大到小進行排序來獲得start到end之間的元素。可以輕鬆取出點擊量最高的前n篇文章。
4.【 zremrangebyrank key start end 】 刪除集合中的元素。排序的方式為按照v由小到大的順序,如果要刪除key集合中的第一個值,則運行 zremrangebyrank artHits 0 0;刪除前3個值:zremrangebyrank artHits 0 2。
5.【 zcard 】 返回key集合中元素的個數。
6.【 zrank key k 】 傳回值k在集合key中排第幾位,是按照v由小到大的順序。排第一名返回0,第二返回1,以此類推。
7.【 zrevrank key k 】 同上,不同的是,按照v由大到小的順序。可以輕鬆取出點擊量最高的文章。
8.【 zscore key k 】 取出集合key中鍵為k對應的值v。
9.【 zrem key k 】 刪除集合中指定元素。
10.【 zincrby key num k 】 給集合key中的元素k加上num,值針對整型。比如 zincrby artHits 3 12,給id為12的文章加上3個點擊量。此時zscore artHits 12的結果是99+3為102。
Redis 有序set添加,刪除和測試中的O(1)的存在成員(固定時間,無論裡麵包含的元素集合的數量)。列表的最大長度為232- 1元素(4294967295,超過4十億每個元素的集合)。
例子
redis 127.0.0.1:6379> ZADD tutorials 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD tutorials 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD tutorials 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD tutorials 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD tutorials 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE tutorials 0 10 WITHSCORES
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
在上述例子中的三個值由命令ZADD插入其分數在redis排序集合并命名tutorials。
Redis 有序集合命令
下表列出了 redis 有序集合的基本命令:
序號 命令及描述
1 ZADD key score1 member1 [score2 member2]
向有序集合添加一個或多個成員,或者更新已存在成員的分數
2 ZCARD key
擷取有序集合的成員數
3 ZCOUNT key min max
計算在有序集合中指定區間分數的成員數
4 ZINCRBY key increment member
有序集合中對指定成員的分數加上增量 increment
5 ZINTERSTORE destination numkeys key [key ...]
計算給定的一個或多個有序集的交集並將結果集儲存在新的有序集合 key 中
6 ZLEXCOUNT key min max
在有序集合中計算指定字典區間內成員數量
7 ZRANGE key start stop [WITHSCORES]
通過索引區間返回有序集合成指定區間內的成員
8 ZRANGEBYLEX key min max [LIMIT offset count]
通過字典區間返回有序集合的成員
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
通過分數返回有序集合指定區間內的成員
10 ZRANK key member
返回有序集合中指定成員的索引
11 ZREM key member [member ...]
移除有序集合中的一個或多個成員
12 ZREMRANGEBYLEX key min max
移除有序集合中給定的字典區間的所有成員
13 ZREMRANGEBYRANK key start stop
移除有序集合中給定的排名區間的所有成員
14 ZREMRANGEBYSCORE key min max
移除有序集合中給定的分數區間的所有成員
15 ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定區間內的成員,通過索引,分數從高到底
16 ZREVRANGEBYSCORE key max min [WITHSCORES]
返回有序集中指定分數區間內的成員,分數從高到低排序
17 ZREVRANK key member
返回有序集合中指定成員的排名,有序整合員按分數值遞減(從大到小)排序
18 ZSCORE key member
返回有序集中,成員的分數值
19 ZUNIONSTORE destination numkeys key [key ...]
計算給定的一個或多個有序集的並集,並儲存在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成員和元素分值)