redis資料結構之有序集合

2021-10-18 10:32:51 字數 1327 閱讀 8961

有序集合與集合大致差不多,不同的是有序集合中的元素可以排序,但與列表使用下標實現排序不一樣,有序集合利用分數作為依據排序。有序集合不能重複,但分數可以重複。

對部落格**發布的文章做排行榜,榜單的維度可能是按時間、按照獲得讚數。比如使用讚數對使用者每天發布文章的排行榜,並實現以下功能:1、新增使用者讚數;2、取消使用者讚數;3、展示獲取贊數最多的十個使用者;4、展示使用者資訊以及使用者分數。思考使用有序集合實現。

有序集合的實現有壓縮列表ziplist、跳躍表skiplist兩種。元素個數少且元素較小使用壓縮列表;元素個數超過128個轉換為skiplist;某個元素大於64位元組時轉換為skiplist。

#新增成員

zadd key score memeber [score memeber ...]

zadd有四個選項

nx: member必需不存在,才可以設定成功,用於新增

xx: member必需存在,才可以設定成功,用於更新

ch: 返回此次操作後,有序集合和分數發生變化的個數

incr: 對score做增加,相當於後面介紹的zincrby

有序集合相比集合增加了排序特性,因此產生了代價,zadd的時間複雜度為o(log(n)),sadd的時間複雜度為o(1)

#計算成員個數

zcard key

#計算某個成員分數

zscore key member

#計算成員排名

zrank key member

zrevrank key member

#刪除成員

zrem key member [member ...]

#增加成員分數

zincrby key increment member

#返回指定排名範圍的成員

zrange key start end [withscores]

zrevrange key start end [withscores]

#返回指定分數範圍的成員

zrangebyscore key min max [withscores]

[limit offset count]

zrevangebyscore key max min [withscores]

[limit offset count]

#返回指定分數範圍成員個數

zcount key min max

#刪除指定排名內的公升序元素

zremrangebyrank key start end

#刪除指定分數範圍的成員

zremrangebyscore key min max

Redis 資料結構之有序集合(sort set)

有序集合 sortset的元素包括 score 分數,int float value 成員,string int float rank等三個屬性,1 實際上是score 和 value的對映 2 value 在有序集合中必須是唯一的,score可以重複 3 rank 從0 開始,score越大,ra...

Redis資料結構之有序集合sortedset

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

Redis資料型別之有序集合

k ey key key 有序集合是有序的,去重的容器資料結構 值只能為字串,最多232 12 1 232 1這裡每個元素對應乙個分數,並按照分數從小到大排序 1.新增元素,檢視元素 新增元素時,在前面加乙個分數 zadd z1 1 a 3 b 2 c 檢視所有元素,正向分值從小到大 zrange ...