當前位置:網站首頁>【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
值介於min
和max
之間(包括等於 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的範圍獲取元素列錶。 -
跳躍錶(跳錶)
- 簡介
有序集合在生活中比較常見,例如根據成績對學生排名,根據得分對玩家排名等。對於有序集合的底層實現,可以用數組、平衡樹、鏈錶等。數組不便元素的插入、删除;平衡樹或紅黑樹雖然效率高但結構複雜;鏈錶查詢需要遍曆所有效率低。Redis采用的是跳躍錶。跳躍錶效率堪比紅黑樹,實現遠比紅黑樹簡單。 - 實例
對比有序鏈錶和跳躍錶,從鏈錶中查詢出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
邊欄推薦
猜你喜歡
隨機推薦
- emplace_back 和 push_back 的區別
- 藍橋杯第三講--二分【習題】
- Qt給靜態屏保加上粒子特效
- leader epoch
- 圖的著色問題
- cesium導入旋轉動畫
- QGC雜記
- Wireshark實驗四:UDP
- 面試面到自閉,職場反思,原來是我沒有掌握其中精髓
- ctf,show msic入門
- 網絡文件系統
- Js基礎_作用域
- 《滲透測試具體流程》
- Endnote使用方法——檢查參考文獻
- 自建Kubernetes的LoadBalancer類型服務方案-MetalLB
- LeetCode 7.整數反轉
- 【ISO15765_UDS&OBD診斷】-02-Network layer網絡層介紹
- C 練習實例90
- 百度BML-飛槳服務器以及Jetson nano部署實戰案例(下)
- 小程序雲開發——雲數據庫的增删查改(2)
- 適合10歲小孩投保的保險產品都有什麼啊?少兒險可以買哪些險種?
- 網上期貨開戶安全麼?期貨開戶准備什麼資料?
- 查看多臺jps的脚本
- Material Design 3 全新的進階版本UI庫
- 雲演 CTF Web題型 lfi 文件包含
- 登錄令牌JWT — JSON WEB TOKEN
- 【leectode 2022.1.22】批量處理任務
- IC驗證中的force/release 學習整理(4)後門訪問機制成與敗(續)
- Leetcode 算法面試沖刺 實戰 五(數組與循環)(十二)
- 數學建模-模糊綜合評價法(評價模型)
- DWR异常:org.xml.sax.SAXException
- 各大直播平臺主播的收入計算方式是怎樣的?
- 工程師必須知道的幾個原則
- 細品事務機制(一)
- DCGAN 源碼解析
- 李宏毅《機器學習》| 神經網絡訓練不起來怎麼辦(下)
- 2021年G2電站鍋爐司爐考試題庫及G2電站鍋爐司爐考試試卷
- Go 自定義日期時間格式解析解决方案 - 解决 `parsing time xx as xx: cannot parse xx as xx` 錯誤
- Redis 是如何處理命令的(客戶端)
- 『淺入淺出』MySQL 和 InnoDB