Sorted Set 類型命令(命令語法、操作演示、命令返回值、時間復雜度、注意事項)

Sorted Set 類型

文章目錄

  • Sorted Set 類型
  • zadd 命令
  • zrange 命令
  • zcard 命令
  • zcount 命令
  • zrevrange 命令
  • zrangebyscore 命令
  • zpopmax 命令
  • bzpopmax 命令
  • zpopmin 命令
  • bzpopmin 命令
  • zrank 命令
  • zscore 命令
  • zrem 命令
  • zremrangebyrank 命令
  • zremrangebyscore 命令
  • zincrby 命令
  • zinterstore 命令
  • zunionstore 命令

前面文章講解了 Set 類型,Set 類型有一個特點,就是集合中的元素是唯一的。而 Zset 類型(Sorted Set)不同,它是一個有序集合,集合中的每一個元素是由“兩個單元組成的”,分別是: 元素本身+對應的分數,依靠這個分數,就維護了集合中元素的有序性,什么意思呢,舉個例子:

在三國中,每一個武將都是有武力值的,我們根據武力值就可以對武將進行一個排名,如下圖:

在這里插入圖片描述

在 zset 類型中,默認是按照**“升序”**的方式排列的,提供了一組獲取元素分數、元素范圍查詢等等功能命令,下面就來介紹一些主要并且常用的命令。

zadd 命令

使用 zadd 命令往有序集合中添加元素和分數,在不指定選項的情況下,如果元素已經存在,則更新分數,如果元素不存在,則添加元素及分數

語法:zadd key [NX | XX] [GT | LT] [CH] [INCR] score member [score member…….]

NX:只能添加新元素,如果元素已經存在,則不能修改已經存在的元素

XX:只能更新已經存在元素,如果元素不存在,不能添加新元素

CH:默認情況下,zadd 返回的是本次成功添加的元素個數,但指定這個選項之后,如果只是更新了分數,那么還會把更新分數的元素給計算上

LT:當前指定的元素必須存在,并且新的分數比當前元素的分數小,才會更新

GT:當前指定的元素必須存在,并且新的分數比當前元素的分數大,才會更新

INCR:將元素的分數加上指定的分數,此時只能指定一個元素和一個分數

score member:表示要添加的元素及分數,并且可以指定多個

操作演示:

  1. 不指定任何選項

zadd key score member

返回值*:成功添加的元素個數

時間復雜度:log(N),會先查找,再加入

在這里插入圖片描述

  1. 指定 nx 選項

zadd key nx score member

返回值:成功添加元素的個數

時間復雜度:log(N),會先查找,再加入

使用 nx 選項添加“趙云”,因為“趙云”存在,所以并沒有對 “趙云” 這個元素進行修改

在這里插入圖片描述

因為 “關羽” 不存在,所以,就可以成功添加 “關羽”

在這里插入圖片描述

  1. 指定 xx 選項

zadd key xx score member

返回值:0,就算修改分數成功,也會返回 0

時間復雜度:log(N),會先查找,在加入

使用 xx 選項,添加 “曹操”,因為曹操這個元素已經存在,所以,就只會更新“分數”

在這里插入圖片描述

因為 “劉備” 不存在,所以,在使用 xx 選項進行添加時,也不會成功添加

在這里插入圖片描述

  1. 指定 ch 選項

zadd key ch score member

返回值:成功添加以及更新的元素個數

時間復雜度:log(N)

修改 “曹操” 的分數為77,修改成功后,返回了一個0,但是,這個返回值就不太好,我們就無法知道我們是否已經修改成功

在這里插入圖片描述

如果加上 ch 選項,那么,就也會將成功修改的元素數量返回,如下圖:

修改曹操的分數為 95

在這里插入圖片描述

  1. 指定 incr 選項

zadd key incr score member

返回值:修改之后的分數

給 “曹操” 加上 5 分

在這里插入圖片描述

zrange 命令

查看有序集合中的元素

語法:zrange key start end [withscores]

【start end】 表示左右區間,獲取指定區間內的元素,cong 0 開始,并且支持負數

withscores 選項表示將元素的分數也顯示出來

時間復雜度:O(log(N) + M),此處 log(N) 要找start對應的位置,接下來就開始遍歷,M 表示遍歷的元素個數。

操作演示:

在這里插入圖片描述

注意:在redis 中,對于字符,存儲的是二進制數據,在獲取的時候,獲取的也是二進制數據,并不會進行“字符集編碼”,所以,在使用 redis-cli 使用 Redis 客戶端時,需要再加一個 – raw 選項才可以顯示出來字符。

zcard 命令

獲取有序列表中元素的個數

語法:zcard key

返回值:元素個數

時間復雜度:O(1)

操作演示:

在這里插入圖片描述

zcount 命令

獲取指定區間中元素的個數

語法:zcount key min max

min 表示左區間

max 表示右區間

并且是閉區間,是包含邊界值的,如果不想包含邊界值,可以使用 (min (max,這里的 min、max 表示下標,獲取指定下標內的元素個數

返回值:元素的個數

時間復雜度:log(N)

注意:zcount 在計算元素個數的時候,是先根據分數找到元素,在根據元素獲取到排名,兩個排名再相減,就得到了元素的個數。

操作演示:

在這里插入圖片描述

使用開區間,不包含 98

在這里插入圖片描述

使用開區間,不包含98,也不包含100

在這里插入圖片描述

注意:min 和 max 是可以寫成浮點數的(zset 分數本身就是浮點數)

在浮點數中,存在兩個特殊的數值:inf(無窮大)、-inf(負無窮大),下面演示以下:

也就是獲取到所有的元素個數

在這里插入圖片描述

zrevrange 命令

按照分數降序遍歷打印

語法:zrevrange key start end [withscores]

返回值:所有元素降序排列

時間復雜度:O(N)

操作演示:

在這里插入圖片描述

zrangebyscore 命令

按照分數查詢元素,和上面的 zcount 類似,只不過,zcount是在下標區間內查詢,而 zrangebyscore 是在指定的分數范圍內查詢,并獲取到區間內的元素

語法:zrangebyscore key min max [withscores]

返回值:區間內的元素

時間復雜度:O(logN+M)

操作演示:

在這里插入圖片描述

zpopmax 命令

刪除有序集合中分數最高的 count 個元素

語法:zpopmax key [count]

返回值:返回刪除的元素

時間復雜度:O(log(N)*M),M 表示刪除元素的個數

操作演示:

在這里插入圖片描述

注意:如果存在多個元素,分數相同,并且同時為最大值,zpopmax刪除的時候,仍然刪除其中一個,因為,在有序列表中,分數相同的元素在排序時會按照字典序來排,刪除靠前的元素

bzpopmax 命令

zpopmax 的阻塞版本,如果有序集合為空,則進行阻塞,阻塞超過一定時間后,就停止阻塞等待,這里就可以把這個有序集合看成一個帶有“阻塞功能”的優先級隊列

語法:bzpopmax key [key……] timeout

這里的 timeout 單位是:秒

返回值:指定鍵中最大的元素

時間復雜度:O(logN)

操作演示:

當指定的 “鍵” 不存在時,就進行阻塞,下圖中,設置的阻塞等待時間是 600 秒
在這里插入圖片描述

在另一個Redis 客戶端添加 key1 這個鍵,此時,正在阻塞的客戶端會直接獲取到里面的元素,返回的值包含三部分:“鍵” 、元素、分數

在這里插入圖片描述

zpopmin 命令

刪除有序集合中最小的元素

語法:zpopmin key [count]

時間復雜度:O(logN*M)

返回值:返回刪除的元素

操作演示:

在這里插入圖片描述

bzpopmin 命令

zpopmin 的阻塞版本,如果有序集合為空,則進行阻塞,阻塞超過一定時間后,就停止阻塞等待,這里就可以把這個有序集合看成一個帶有“阻塞功能”的優先級隊列

語法:bzpopmin key [key] timeout

可以同時監聽多個 key ,哪個 key 不為空,就返回哪個 key 中最小的元素

返回值:刪除成功的最小的元素

時間復雜度:O(logN)

這里和 bzpopmax 的用法一樣,就不在演示。

zrank 命令

查看元素在有序集合中的位置(按照升序的方式查看)

語法:zrank key member

返回值:指定元素的位置

時間復雜度:O(logN)

操作演示:

在這里插入圖片描述

zrevrank key member

這個是按照倒序的方式查看的

在這里插入圖片描述

zscore 命令

查詢指定元素的分數

語法:zscore key member

時間復雜度:O(1)

返回值:指定元素的分數

操作演示:

在這里插入圖片描述

zrem 命令

刪除指定的元素

語法:zrem key member [member]、

時間復雜度:O(logN *M)

返回值:表示刪除成功的元素個數

操作演示:

在這里插入圖片描述

zremrangebyrank 命令

刪除指定范圍內的元素

語法:zremrangebyrank key start end

時間復雜度:O(longN + M)

N 是有序集合的元素個數

M 是start - end 區間內的元素

[start,end] 這是閉區間

返回值:成功刪除元素的個數

操作演示:

在這里插入圖片描述

zremrangebyscore 命令

通過大小分數來指定一個刪除的區間

語法:zremrangebyscore key min max

這里的 [min,max] 默認是閉區間,當然也可以通過 “(” 自定開區間

時間復雜度:O(logN+M)

返回值:成功刪除元素的個數

操作演示:

刪除[50,70] 之間的分數

在這里插入圖片描述

zincrby 命令

給指定元素的分數加上指定的分數值

語法:zincrby key increment member

increment 表示要添加的指定分數值,也可以指定負數,這樣就變成減法了

時間復雜度:O(logN)

返回值:加上分數后的值

操作演示:

給 v6 的分數加上10

在這里插入圖片描述

zinterstore 命令

求指定的有序列表的交集、

語法:zinterstore destination numkeys key[key….] [weigths weight……] [aggregate < sum | min | max]

destination:表示存儲交集結果的key

numskeys:表示key的數量

wieghts:給元素分配不同的權重,也就是讓元素的分數*指定的權重

agrregate 表示求交集時,交集的結果中元素的分數應該按照哪種規定描述

返回值:交集結果

操作演示:

給 key1 中添加 v1-10、v2-20、v3-30、v4-40

給 key2 中添加 v3-10、v4-20、v5-30、v6-40

在這里插入圖片描述

求得交集的結果為

在這里插入圖片描述

注意:這里交集結果中元素的分數默認是是交集中相同元素分數的和,但是也可以通過選項指定分數的規則

zunionstore 命令

求指定的有序列表的并集

語法:zunionstore destination numkeys key[key….] [weigths weight……] [aggregate < sum | min | max]

返回值:并集的結果

操作演示
在這里插入圖片描述

以上是 zset 類型中主要并且常用命令的一個簡單講解,如果想要學習其他的命令可以參考官方文檔:zset命令官方文檔跳轉鏈接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42620.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42620.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42620.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線程池案例

秒殺 需求 10個禮物20個客戶搶隨機10個客戶獲取禮物&#xff0c;另外10無法獲取禮物 任務類 記得給共享資源加鎖 public class MyTask implements Runnable{// 禮物列表private ArrayList<String> gifts ;// 用戶名private String username;public MyTask( String user…

android Dialog全屏沉浸式狀態欄實現

在Android中&#xff0c;創建沉浸式狀態欄通常意味著讓狀態欄背景與應用的主題顏色一致&#xff0c;并且讓對話框在狀態欄下面顯示&#xff0c;而不是浮動。為了實現這一點&#xff0c;你可以使用以下代碼片段&#xff1a; 1、實際效果圖&#xff1a; 2、代碼實現&#xff1a;…

揭秘GPT-4o:未來智能的曙光

引言 近年來&#xff0c;人工智能&#xff08;AI&#xff09;的發展突飛猛進&#xff0c;尤其是自然語言處理&#xff08;NLP&#xff09;領域的進步&#xff0c;更是引人注目。在這一背景下&#xff0c;OpenAI發布的GPT系列模型成為了焦點。本文將詳細探討最新的模型GPT-4o&a…

Unity海面效果——6、反射和高光

Unity引擎制作海面效果 大家好&#xff0c;我是阿趙。 上一篇的結束時&#xff0c;海面效果已經做成這樣了&#xff1a; 這個Shader的復雜程度已經比較高了&#xff1a; 不過還有一些美中不足的地方。 1、 海平面沒有反射到天空球 2、 在近岸邊看得到水底的部分&#xff0c;水…

JVM調優:深入理解與實戰指南

引言 Java虛擬機&#xff08;JVM&#xff09;作為Java應用程序的運行環境&#xff0c;其性能直接影響到應用程序的響應速度、吞吐量和穩定性。JVM調優是Java開發者必須掌握的一項關鍵技能&#xff0c;它能夠幫助我們更好地利用系統資源&#xff0c;提升應用程序的性能。本文將…

一些關于C++的基礎知識

引言&#xff1a;C兼容C的大部分內容&#xff0c;但其中仍有許多小細節的東西需要大家注意 一.C的第一個程序 #include <iostream> using namespace std;int main() {cout << "hello world!" << endl;return 0; } 第一次看這個是否感覺一頭霧水…

數據挖掘——matplotlib

matplotlib概述 Mat指的是Matlab&#xff0c;plot指的是畫圖&#xff0c;lib即library&#xff0c;顧名思義&#xff0c;matplotlib是python專門用于開發2D圖表的第三方庫&#xff0c;使用之前需要下載該庫&#xff0c;使用pip命令即可下載。 pip install matplotlib1、matpl…

elasticsearch SQL:在Elasticsearch中啟用和使用SQL功能

?博主首頁 &#xff1a; 「碼到三十五」 &#xff0c;同名公眾號 :「碼到三十五」&#xff0c;wx號 : 「liwu0213」 ?博主專欄 &#xff1a; <mysql高手> <elasticsearch高手> <源碼解讀> <java核心> <面試攻關> ?博主的話 &#xff1a…

服務注冊Eureka

目錄 一、背景 1、概念 2、CAP 理論 3、常見的注冊中心 二、Eureka 三、搭建 Eureka Server 1、搭建注冊中心 四、服務注冊 五、服務發現 六、Eureka 和 Zooper 的區別 一、背景 1、概念 遠程調用就類似于一種通信 例如&#xff1a;當游客與景區之間進行通信&…

代碼隨想錄算法訓練營第六十三天 | prim算法、kruskal算法、復習

53. 尋寶 — prim算法 題目鏈接&#xff1a;https://kamacoder.com/problempage.php?pid1053 文檔講解&#xff1a;https://programmercarl.com/kamacoder/0053.%E5%AF%BB%E5%AE%9D-prim.html 思路 本題是最小生成樹的模板題&#xff0c;最小生成樹可以使用 prim算法&#xf…

bash shell 重定向輸入和輸出

shell 提供的重定向操作符 操作符作用>將命令的輸出發到一個文件中如果文件存在&#xff0c;則新的文件數據會覆蓋已經存在的文件>>將命令的輸出追加到一有文件如果文件不存在&#xff0c;則創建新的文件<將文件內容重定向到命令<<內聯輸入重定向(inline in…

Xubuntu24.04之設置高性能模式兩種方式(二百六十一)

簡介: CSDN博客專家,專注Android/Linux系統,分享多mic語音方案、音視頻、編解碼等技術,與大家一起成長! 優質專欄:Audio工程師進階系列【原創干貨持續更新中……】?? 優質專欄:多媒體系統工程師系列【原創干貨持續更新中……】?? 優質視頻課程:AAOS車載系統+AOSP…

蒼穹外賣--新增員工

代碼開發 package com.sky.controller.admin;import com.sky.constant.JwtClaimsConstant; import com.sky.dto.EmployeeDTO; import com.sky.dto.EmployeeLoginDTO; import com.sky.entity.Employee; import com.sky.properties.JwtProperties; import com.sky.result.Result…

Springboot各個版本維護時間

Springboot各個版本維護時間

MQTT教程--服務器使用EMQX和客戶端使用MQTTX

什么是MQTT MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一種輕量級、基于發布-訂閱模式的消息傳輸協議&#xff0c;適用于資源受限的設備和低帶寬、高延遲或不穩定的網絡環境。它在物聯網應用中廣受歡迎&#xff0c;能夠實現傳感器、執行器和其它設備…

【Linux】shell基礎知識點(updating)

1.輸出重定向2.多命令批量執行&#xff08;; 、&&、 ||&#xff09;3.腳本不同方式執行的區別&#xff08;source、bash、sh、./&#xff09;4.理解環境變量5.export6.引號的使用last.命令相關 1.輸出重定向 3種數據流&#xff1a; stdin&#xff1a;標準輸入&#xf…

jmeter持續學習之----性能初級一些概念和指標

服務端為什么要進行性能測試 大量用戶下&#xff0c;系統能否穩定運行&#xff08;比較多&#xff09; 用于硬件服務器的選型 用于軟件技術的選型 性能測試關注的點 用戶角度:響應時間 資源占用:并發用戶數,TPS,資源占用(cpu,內存,JVM) 性能測試策略 基準測試:單用戶測試,對…

去了字節跳動,才知道年薪40W的測試有這么多?

最近脈脈職言區有一條討論火了&#xff1a; 哪家互聯網公司薪資最‘厲害’&#xff1f; 下面的評論多為字節跳動&#xff0c;還炸出了很多年薪40W的測試工程師 我只想問一句&#xff0c;現在的測試都這么有錢了嗎&#xff1f; 前幾天還有朋友說&#xff0c;從騰訊跳槽去了字節&…

8.8.8.8 IP地址的作用

在跟著韋東山老師的學習手冊中看見了關于8.8.8.8 IP用于檢測網絡狀態&#xff0c;然后搜索了關于此IP的相關作用如下&#xff1a; 公共DNS服務&#xff1a;8.8.8.8是Google提供的兩個公共DNS服務器地址之一&#xff08;另一個是8.8.4.4&#xff09;。DNS&#xff08;域名系統&a…

代碼隨想錄訓練營第三十天 452用最少數量的箭引爆氣球 435無重疊區間 763劃分字母區間

第一題&#xff1a; 原題鏈接&#xff1a;452. 用最少數量的箭引爆氣球 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;先根據每個元素的第一個值進行排序&#xff0c;然后從第一個元素開始遍歷&#xff0c;這里要注意我們初始化結果值的時候直接初始化為1&#x…