Redis數據類型之ZSet有序集合類型

1.3. 有序集合(sorted set) ZSET

1.3.1. 簡介

  1. Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重複的成員。
  2. 不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來爲集合中的成員進行從小到大的排序。
  3. 有序集合的成員是唯一的,但分數(score)卻可以重複。
  4. 集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是O(1)。 集合中最大的成員數爲 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

Redis的ZSet是有序、且不重複
(很多時候,我們都將redis中的有序集合叫做zsets,這是因爲在redis中,有序集合相關的操作指令都是以z開頭的)

1.3.2. 命令

賦值語法:

  • ZADD key score1 member1 [score2 member2]
    向有序集合添加一個或多個成員,或者更新已存在成員的分數
    在這裏插入圖片描述

取值語法:

  • ZCARD key 獲取有序集合的成員數
    在這裏插入圖片描述
  • ZCOUNT key min max 計算在有序集合中指定區間分數的成員數
    在這裏插入圖片描述
  • ZRANK key member 返回有序集合中指定成員的索引
    在這裏插入圖片描述
  • ZRANGE key start stop [WITHSCORES]
    通過索引區間返回有序集合成指定區間內的成員(低到高)
    在這裏插入圖片描述
  • ZRANGEBYSCORE key min max [WITHSCORES ] [LIMIT] ,通過分數返回有序集合指定區間的成員
    在這裏插入圖片描述
  • ZREVRANGE key start stop [WITHSCORES]
    返回有序集中指定區間內的成員,通過索引,分數從高到底
    在這裏插入圖片描述
  • ZREVRANGEBYSCORE key max min [WITHSCORES] ,返回有序集合中指定分數區間的成員,分數從高到低排序
    在這裏插入圖片描述

刪除語法:

  • del key 移除集合
  • ZREM key member [member …] 移除有序集合中的一個或多個成員
    在這裏插入圖片描述
  • ZREMRANGEBYRANK key start stop 移除有序集合中給定的排名區間的所有成員(第一名是0)(低到高排序)
    在這裏插入圖片描述
  • ZREMRANGEBYSCORE key min max 移除有序集合中給定的分數區間的所有成員
    在這裏插入圖片描述
  • ZINCRBY key increment member 增加member元素的分數increment,返回值是更改後的分數
    在這裏插入圖片描述

1.3.3. 應用場景

常應用於:排行榜

  1. 比如twitter 的public timeline可以以發表時間作爲score來存儲,這樣獲取時就是自動按時間排好序的。

  2. 比如一個存儲全班同學成績的Sorted Set,其集合value可以是同學的學號,而score就可以是其考試得分,這樣在數據插入集合的時候,就已經進行了天然的排序。

  3. 還可以用Sorted Set來做帶權重的隊列,比如普通消息的score爲1,重要消息的score爲2,然後工作線程可以選擇按score的倒序來獲取工作任務。讓重要的任務優先執行。
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章