zset.

zset? 有序集合

zset 保留了 set 不能有重復元素的特點

zset 中的每個元素都有一個唯一的浮點類型的分數(score)與之關聯,使得 zset 內部的元素是可以維護有序性的。但是這個有序不是用下標作為排序依據的,而是根據分數(score)

數據結構是否允許重復元素是否有序有序依據
list索引下標
set
zset分數

常見命令

zadd

添加 \ 更新指定的元素以及關聯的分數到 zset 中(分數符合 double 類型,+inf -inf 合法)

zadd key [NX | XX] [GT | LT] [CH] [INCR] score member [score member ...]

返回本次添加成功的元素個數? O(log(N))

XX? 僅用于更新已經存在的元素,不會添加新的元素

NX? 僅用于添加新的元素,不會更新已經存在的元素

LT? 新的分數小于原分數就更新,反之不更新

GT? 新的分數大于原分數就更新,反之不更新

CH? zadd 默認返回本次添加的元素個數,指定選項后,將包含本次更新的元素個數

INCR? 類似 zincrby,將元素的分數加上指定的分數。只能指定一個元素和分數

分數相同時,按照元素自身的字典序排列

分數不同時,按照分數排列

zset? 內部是按照升序排列

zrange

返回指定區間內的元素,按照分數升序

zrange key start stop [withscores]

返回區間內的元素列表? O(log(N) + M)? N 集合中元素的個數? ? M? start 到 stop 的元素個數

加上 withscores 將分數也一起返回

redis 內部存儲數據時,是按照二進制的方式來存儲的

redis 服務器不負責“字符編碼”,把二進制轉換成漢字,需要客戶端支持? ? --raw

zcard

獲取一個 zset 的基數(cardinality),即 zset 中的元素個數

zcard key

返回 zset 中的元素個數? O(1)

zcount

返回分數在 [min, max] 的元素個數(min max 默認包含,可通過 ( 排除)

zcount key min max

返回滿足條件的元素列表個數? O(log(N))

zset 內部會記錄每個元素當前的“排行” \ “次序”(下標)

查詢到元素,就直接知道了元素所在的“次序”,直接把 min 和 max 對應的元素的次序減法

min 和 max 可以寫成浮點數的形式(分數本身就是浮點數)

inf 無窮大? ? ? ? ? ? ? ? ? ? ?-inf? 無窮小

zrevrange

返回指定區間里的元素,按照分數降序排列

zrevrange key start stop [withscores]

返回區間內的元素個數? O(log(N) + M)

zrangebyscore

返回分數在 [min, max] 的元素

zrangebyscore key min max [withscores]

返回區間內的元素列表? O(log(N) + M)

zpopmax zpopmin

刪除并返回分數最高的 count 個元素

zpopmax key [count ...]

zpopmin key [count ...]

返回 分數 和 元素列表? O(log(N) *?count)

雖然 Redis 的有序集合記錄了開頭的元素,但是刪除的時候使用的使用的是通用的刪除函數,導致出現了重新查找的過程? ?O(1)? ——>? O(log(N))

如果存在多個元素,分數相同,同為最大值,zpopmax 刪除時只刪除其中一個元素

按照元素的字典序進行排列

bzpopmax bzpopmin

阻塞版本的 zpopmax? zpopmin

bzpopmax key [key ...] timeout

bzpopmin key [key ...] timeout

返回元素列表? O(log(N))

timeout? 超時時間,支持小寫形式

zrank? zrevrank

返回指定元素的排名(下標從 0 開始)

zrank key member? 升序

zrevrank key member? 降序

返回排名? O(log(N))

zcount? 在計算時,先根據分數找到元素,再根據元素獲取排名,把排名一減,得到元素個數

rev >= reverse

zscore

返回指定元素的分數

zscore key member

返回分數? O(1)

zrem

刪除指定的元素

zrem key member [member ...]

返回本次刪除的元素個數? O(log(N) * count)

zremrangebyrank

按照排序,刪除指定范圍內的元素(左閉右閉)升序

zremrangebyrank key start stop

返回本次刪除的元素個數? O(log(N) + M)

zremrangebyscore

按照分數,刪除指定范圍內的元素(左閉右閉)升序

zremrangebyscore key min max? ? ? ?(? 排除邊界值

返回本次刪除的元素個數? O(log(N) + M)

zincrby

為指定的元素的關聯分數添加指定的分數值

zincrby key increment member

返回增加后的元素的分數? O(log(N))

zinter zinterstore

求出給定有序集合中元素的交集,并保存進目標集合中

合并過程中以元素為單位,元素對應的分數按照不同的聚合方式和權重得到新的分數

zinter numkeys key [key ...] [weights weight [weight ...]] [aggreg <sum | min | max >]

zinterstore destination?numkeys key [key ...] [weights weight [weight ...]]

[aggreg <sum | min | max >]

返回目標集合的元素列表

返回目標集合中的元素個數? O(N*K) + O(M*log(M))

N? 最小集合的元素個數? ? ?K? 集合的個數? ? ? M? 目標集合的元素個數

zunion? zunionstore

求出給定有序集合中元素的并集,并保存進目標集合中

zuoion numkeys key [key ...] [weights weight [weight ...]] [aggreg <sum | min | max >]

zunionstore?destination?numkeys key [key ...] [weights weight [weight ...]]

[aggreg <sum | min | max >]

O(N) + O(log(M) * M)

N? 集合的個數? ? ?M? 目標集合的元素個數

內部編碼

1)ziplist(壓縮列表)元素個數較少或者元素的體積較小

2)skiplist(跳表)

跳表是一個“復雜鏈表”,查詢元素 O(N),相比于樹狀結構,更適合按照范圍獲取元素 (B+樹)

應用場景

排行榜系統

例如網站上的熱搜信息,榜單的維度是多方面的,“分數”是實時變化的

只要把相關信息和對應的分數放到 zset 中就會自動排序

隨時可以按照下表進行查詢,隨著分數變化,使用 zincrby 也更方便,還可以自動排序

對于不同維度,可以將不同維度的數值都放到一個有序集合中,通過 zinterstore 或者 zunionstore 把上述集合按照權重進行集合間運算,得到結果集合

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

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

相關文章

Spring 數據庫編程

Spring JDBC 傳統的JDBC在操作數據庫時&#xff0c;需要先打開數據庫連接&#xff0c;執行SQL語句&#xff0c;然后封裝結果&#xff0c;最后關閉數據庫連接等資源。頻繁的數據庫操作會產生大量的重復代碼&#xff0c;造成代碼冗余&#xff0c;Spring的JDBC模塊負責數據庫資源…

492Q 型氣缸蓋雙端面銑削組合銑床總體設計

一、引言 492Q 型氣缸蓋是發動機的重要組成部分&#xff0c;其雙端面的加工精度對發動機的性能和可靠性有著重要影響。設計一款適用于 492Q 型氣缸蓋雙端面銑削的組合銑床&#xff0c;能夠提高加工效率和質量&#xff0c;滿足發動機生產的需求。 二、總體設計要求 加工精度&…

顎式破碎機的設計

一、引言 顎式破碎機作為礦山、建材等行業的重要破碎設備&#xff0c;其性能優劣直接影響物料破碎效率與質量。隨著工業生產規模的擴大和對破碎效率要求的提高&#xff0c;設計一款高效、穩定、節能的顎式破碎機具有重要意義。 二、設計需求分析 處理能力&#xff1a;根據目…

第三階段面試題

Nginx nginx常用模塊以及其功能 proxy模塊&#xff0c;進行代理功能 ssl模塊&#xff0c;進行HTTPS協議的使用 gzip模塊&#xff0c;進行傳輸數據的壓縮 upstream模塊&#xff0c;進行反向代理時使用 static模塊&#xff0c;靜態資源進行訪問的模塊 cache模塊&#xff0…

鴻蒙NEXT開發鍵盤工具類(ArkTs)

export declare type KeyboardCallBack (show: boolean, height: number) > void; import { AppUtil } from ./AppUtil; import { LogUtil } from ./LogUtil; import { ArrayUtil } from ./ArrayUtil;/*** 鍵盤工具類* author 鴻蒙布道師* since 2025/04/18*/ export class…

基于 LabVIEW 的電液伺服閥測試臺開發

開發了一種基于 LabVIEW 圖形編程語言的自動測試系統&#xff0c;能夠完成電液伺服閥的空載流量特性、壓力增益特性、內泄漏特性等靜態特性的自動測試。針對測試過程中干擾信號頻段與正常信號頻段接近&#xff0c;普通數字濾波器濾波效果不佳的問題&#xff0c;采用迭代濾波分解…

【uniapp】vue2 使用 Vuex 狀態管理

創建store文件夾&#xff1a;store/index.js // index.js import Vue from vue import Vuex from vuex import address from ./modules/address.jsVue.use(Vuex)const store new Vuex.Store({modules: {address} })export default store 創建modules文件夾&#xff1a;modul…

c# 簡單實現將Message的內容保存到txt中,超過100個則清理舊文件

using System; using System.IO; using System.Threading;public static class LogManager {private static readonly object _fileLock new object(); // 線程安全鎖private const int MaxFiles 100; // 最大文件數限制private const string LogDire…

阿里云鏡像加速僅支持阿里云產品了

最近在拉取docker鏡像時一直報超時的錯誤&#xff1a; docker pull hello-world Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exce…

從零實現Git安裝、使用

一、git安裝 Git官方下載 1.下載exe程序 2.雙擊安裝&#xff0c;一直點擊next&#xff0c;默認安裝 安裝完成后&#xff0c;在任意文件夾右鍵&#xff0c;出現下圖所示&#xff0c;即為安裝成功。 3.【Git Bash Here】調出命令窗口&#xff0c;設置用戶名和 email 地址。 gi…

生產環境中如何使用Caffeine+Redis實現二級緩存(詳細分析了遇到的各種情況)

生產環境中如何使用CaffeineRedis實現二級緩存&#xff08;詳細分析了各種情況&#xff09; 本篇主要講解的是實現CaffeineRedis實現一個現成的使用流程。下一篇講解什么是Caffeine以及caffeine的使用 00背景&#xff1a; 使用Caffeine和Redis的二級緩存方案源自于分布式系統…

RT-Thread開發文檔合集

瑞薩VisionBoard開發實踐指南 RT-Thread 文檔中心 RT-Thread-【RA8D1-Vision Board】 RA8D1 Vision Board上的USB實踐RT-Thread問答社區 - RT-Thread 【開發板】環境篇&#xff1a;05燒錄工具介紹_嗶哩嗶哩_bilibili 【RA8D1-Vision Board】基于OpenMV 實現圖像分類_嗶哩嗶哩_…

甘果桌面tv版下載-甘果桌面安卓電視版使用教程

甘果桌面 TV 版是一款備受關注的應用&#xff0c;它可以讓安卓電視的界面更加個性化、操作更加便捷。接下來&#xff0c;我們就詳細了解一下甘果桌面 TV 版的下載方法以及安卓電視版的使用教程。 甘果桌面 TV 版下載 打開你的安卓電視&#xff0c;找到并進入電視自帶的應用商店…

RAII資源管理理解

基礎介紹 RAII (Resource Acquisition Is Initialization) 是一種 C 編程范式&#xff0c;這不是一個語法特性&#xff0c;而是一種處理方式。RAII的思想&#xff1a; 資源獲取與對象初始化同時發生資源釋放與對象銷毀同時發生通過對象的生命周期來管理資源&#xff0c;確保資…

解鎖元生代:ComfyUI工作流與云原生后端的深度融合

目錄 藍耘元生代&#xff1a;智算新勢力崛起? ComfyUI 工作流創建詳解? ComfyUI 初印象? 藍耘平臺上搭建 ComfyUI 工作流? 構建基礎工作流實操? 代碼示例與原理剖析? 云原生后端技術全景 云原生后端概念解析? 核心技術深度解讀? 藍耘元生代中兩者的緊密聯系?…

實戰篇|多總線網關搭建與量產驗證(5000 字深度指南)

引言 1. 環境準備與硬件選型 1.1 項目需求分析 1.2 SoC 與開發板選型 1.3 物理接口與 PCB 設計 1.4 電源與供電保護 2. 軟件架構與協議棧移植 2.1 分層架構詳解 2.2 協議棧移植步驟 2.3 高可用驅動設計 2.4 映射邏輯與 API 定義 3. 開發流程與實踐 3.1 敏捷迭代與里程碑 3.2 核…

Kafka安全認證技術:SASL/SCRAM-ACL方案詳解

#作者 &#xff1a;張桐瑞 文章目錄 1Kafka安全認證技術介紹2基礎設置3 配置SASL/SCRAM認證3.1編寫server.properties配置3.2編寫kafka.conf密碼文件3.3編寫user.properties配置文件3.4編寫kafka-run-class.sh腳本文件3.5Zk中增加kafka用戶3.6啟動kafka進程 1Kafka安全認證技術…

TCP/IP和UDP協議的發展歷程

TCP/IP和UDP協議的發展歷程 引言 互聯網的發展史是人類技術創新的輝煌篇章&#xff0c;而在這一發展過程中&#xff0c;通信協議發揮了奠基性的作用。TCP/IP&#xff08;傳輸控制協議/互聯網協議&#xff09;和UDP&#xff08;用戶數據報協議&#xff09;作為互聯網通信的基礎…

PhotoShop學習10

1.畫板功能的使用 使用畫板功能可以輕松針對不同的設備和屏幕尺寸設計網頁和 APP。畫板是一種容器&#xff0c;類似于特殊圖層組。畫板中的圖層在圖層面板中&#xff0c;按畫板進行分組。 使用畫板&#xff0c;一個文檔中可以有多個設計版面&#xff0c;這樣可以在畫板之間輕…

X-AnyLabeling開源程序借助 Segment Anything 和其他出色模型的 AI 支持輕松進行數據標記。

一、軟件介紹 文末提供源碼和程序下載學習 使用 X-AnyLabeling開源程序可以 導入、管理和保存數據。用戶可以通過多種方式導入圖像和視頻文件&#xff0c;包括快捷方式或菜單選項。此外&#xff0c;它還涵蓋數據刪除、圖像切換以及標簽和圖像數據的保存&#xff0c;以確保高效…