Redis 有序集合 SortedSet

2021-09-01 16:08:49 字數 2383 閱讀 2785

sortedset 和 set 型別極為相似,它們都是字串的集合,都不允許重複的成員出現在乙個 set 中。它們之間的主要差別是 sortedset 中的每乙個成員都會有乙個分數 (score) 與之關聯,redis 正是通過分數來為集合中的成員進行從小到大的排序。然而需要額外指出的是,儘管 sortedset 中的成員必須是唯一的,但是分數 (score) 卻是可以重複的。

在 sortedset 中新增、刪除或更新乙個成員都是非常快速的操作,說的通俗一點,底層結構是乙個跳表,所以其時間複雜度為集合中成員數量的對數。由於 sortedset 中的成員在集合中的位置是有序的,因此,即便是訪問位於集合中部的成員也仍然是非常高效的。

事實上,redis 所具有的這一特徵在很多其它型別的資料庫中是很難實現的,換句話說,在該點上要想達到和 redis同樣的高效,在其它資料庫中進行建模是非常困難的。

在 redis 的 key/value 結構中,sortedset 型別也可理解為如下結構

新增元素

zadd key score member score2 member2 …:將所有成員以及該成員的分數存放到 sortedset 中

獲取元素/分數

zcard key:獲取集合中的成員數量

zscore key member:返回指定成員的分數

zrange key start end [withscores]:獲取集合中腳標為 start-end 的成員,[withscores] 引數表明返回的成員包含其分數。

zrevrange key start stop [withscores]:照元素分數從小到大的順序返回索引從 start 到 stop 之間的所有元素 (包括兩端的元素)

zrangebyscore key min max [withscores] [limit offset count]:返回分數在 [ min,max ] 的成員並按照分數從低到高排序。[withscores]:顯示分數;[limit offset count]:offset 表明從腳標為offset的元素開始並返回 count 個成員。

其他命令

zrank key member:返回成員在集合中的位置。(分數從小到大)。

zrevrank key member:返回成員在集合中的位置

zcount key min max:獲取分數在 [ min,max ] 之間的成員數量

zincrby key increment member:設定指定成員的增加的分數。

刪除元素

zrem key member[member…]:移除集合中指定的成員,可以指定多個成員。

zremrangebyrank key start stop:按照排名範圍刪除元素

zremrangebyscore key min max:按照分數範圍刪除元素

使用場景

sortedset 型別還可用於構建索引資料。

Redis資料結構之有序集合sortedset

有序集合 sorted set 用於儲存多個字串元素,它是在集合 set 的基礎上給每個元素增加了乙個用於排序的字段 score 元素同樣不可重複,可以根據分數索引獲取元素,此外,提供了根據score獲取指定範圍以及排序功能 zadd 新增資料,返回元素個數 zadd key score1 memb...

Redis 有序集合

redis 有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。不同的是每個元素都會關聯乙個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數 score 卻可以重複。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度...

Redis有序集合

redis 有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。不同的是每個元素都會關聯乙個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數 score 卻可以重複。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度...