當前位置:網站首頁>【Redis】Zset有序類型基本使用

【Redis】Zset有序類型基本使用

2022-01-27 10:17:18 兮動人

1. 簡介

  • Redis有序集合zset(sorted set)與普通集合set非常相似,是一個沒有重複元素的字符串集合。
  • 不同之處是有序集合的每個成員都關聯了一個評分(score),這個評分(score)被用來按照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,但是評分可以是重複了 。
  • 因為元素是有序的, 所以你也可以很快的根據評分(score)或者次序(position)來獲取一個範圍的元素。
  • 訪問有序集合的中間元素也是非常快的,因此能够使用有序集合作為一個沒有重複成員的智能列錶。

2. 常用命令

  • 將一個或多個 member 元素及其 score 值加入到有序集 key 當中
zadd <key> <score1> <value1> <score2> <value2>...
  • 返回有序集 key 中,下標在<start><stop>之間的元素
    withscores,可以讓分數一起和值返回到結果集
    在這裏插入圖片描述

  • 返回有序集 key 中,所有 score 值介於 minmax 之間(包括等於 min 或 max )的成員。有序集成員按 score 值遞增(從小到大)次序排列

zrangebyscore key minmax [withscores] [limit offset count]

在這裏插入圖片描述

  • 同上,改為從大到小排列
zrevrangebyscore key maxmin [withscores] [limit offset count]   

在這裏插入圖片描述

  • 為元素的score加上增量
zincrby <key> <increment> <value>   

在這裏插入圖片描述

  • 删除該集合下指定值的元素
zrem <key> <value>
  • 統計該集合,分數區間內的元素個數
zcount <key> <min> <max>

在這裏插入圖片描述

  • 返回該值在集合中的排名,從0開始
zrank <key> <value>

在這裏插入圖片描述

  • 案例:如何利用zset實現一個文章訪問量的排行榜?
    在這裏插入圖片描述

3. zset數據結構

  • SortedSet(zset)是Redis提供的一個非常特別的數據結構,一方面它等價於Java的數據結構Map<String, Double>,可以給每一個元素value賦予一個權重score,另一方面它又類似於TreeSet,內部的元素會按照權重score進行排序,可以得到每個元素的名次,還可以通過score的範圍來獲取元素的列錶。

  • zset底層使用了兩個數據結構
    (1)hash,hash的作用就是關聯元素value和權重score,保障元素value的唯一性,可以通過元素value找到相應的score值。
    (2)跳躍錶,跳躍錶的目的在於給元素value排序,根據score的範圍獲取元素列錶。

  • 跳躍錶(跳錶)

  1. 簡介
    有序集合在生活中比較常見,例如根據成績對學生排名,根據得分對玩家排名等。對於有序集合的底層實現,可以用數組、平衡樹、鏈錶等。數組不便元素的插入、删除;平衡樹或紅黑樹雖然效率高但結構複雜;鏈錶查詢需要遍曆所有效率低。Redis采用的是跳躍錶。跳躍錶效率堪比紅黑樹,實現遠比紅黑樹簡單。
  2. 實例
    對比有序鏈錶和跳躍錶,從鏈錶中查詢出51
    (1) 有序鏈錶
    在這裏插入圖片描述
    要查找值為51的元素,需要從第一個元素開始依次查找、比較才能找到。共需要6次比較。
    (2) 跳躍錶
    在這裏插入圖片描述
    從第2層開始,1節點比51節點小,向後比較。
    21節點比51節點小,繼續向後比較,後面就是NULL了,所以從21節點向下到第1層
    在第1層,41節點比51節點小,繼續向後,61節點比51節點大,所以從41向下
    在第0層,51節點為要查找的節點,節點被找到,共查找4次。
  • 從此可以看出跳躍錶比有序鏈錶效率要高

版權聲明
本文為[兮動人]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201271017180221.html

隨機推薦