有序集合與集合大致差不多,不同的是有序集合中的元素可以排序,但與列表使用下標實現排序不一樣,有序集合利用分數作為依據排序。有序集合不能重複,但分數可以重複。
對部落格**發布的文章做排行榜,榜單的維度可能是按時間、按照獲得讚數。比如使用讚數對使用者每天發布文章的排行榜,並實現以下功能: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 ...