Redis實戰(3)-- 高級數據結構zset

有序集合(ZSET):

可以用作相關有序集合相對于哈希、列表、集合來說會有一點點陌生,但既然叫有序集合,那么它和集合必然有著聯系,它保留了集合不能有重復成員的特性,但不同的是,有序集合中的元素可以排序。但是它和列表使用索引下標作為排序依據不同的是,它給每個元素設置一個分數( score)作為排序的依據。

有序集合中的元素不能重復,但是score可以重復,就和一個班里的同學學號不能重復,但是考試成績可以相同。

有序集合提供了獲取指定分數和元素范圍查詢、計算成員排名等功能,合理的利用有序集合,能幫助我們在實際開發中解決很多問題。

使用場景

有序集合比較典型的使用場景就是排行榜系統。例如視頻網站需要對用戶上傳的視頻做排行榜,榜單的維度可能是多個方面的:按照時間、按照播放數量、按照獲得的贊數。

補充】但是實際zrank進行排名,是異步定時執行的,不會進行每秒進行算一次,因為算一次消耗很大。

集合內操作命令
zadd添加成員

返回結果代表成功添加成員的個數

要注意:

zadd命令還有四個選項nx、xx、ch、incr 四個選項

nx: member必須不存在,才可以設置成功,用于添加。

xx: member必須存在,才可以設置成功,用于更新。

ch: 返回此次操作后,有序集合元素和分數發生變化的個數

incr: 對score做增加,相當于后面介紹的zincrby

zcard 計算成員個數

zscore 計算某個成員的分數常用

如果成員不存在則返回nil

zrank計算成員的排名常用

zrank是從分數從低到高返回排名

zrevrank反之

很明顯,排名從0開始計算。

zrem 刪除成員

允許一次刪除多個成員。

返回結果為成功刪除的個數。

zincrby 增加成員的分數

zrange和zrevrange返回指定排名范圍的成員常用

有序集合是按照分值排名的,zrange是從低到高返回,zrevrange反之。如果加上

withscores選項,同時會返回成員的分數

zrangebyscore返回指定分數范圍的成員

zrangebyscore key min max [withscores] [limit offset count]

zrevrangebyscore key max min [withscores][limit offset count]

其中zrangebyscore按照分數從低到高返回,zrevrangebyscore反之。例如下面操作從低到高返回200到221分的成員,withscores選項會同時返回每個成員的分數。

同時min和max還支持開區間(小括號)和閉區間(中括號),-inf和+inf分別代表無限小和無限大:

zcount 返回指定分數范圍成員個數

zcount key min max

zremrangebyrank 按升序刪除指定排名內的元素

zremrangebyrank key start end

zremrangebyscore 刪除指定分數范圍的成員

zremrangebyscore key min max

實際案例

zset計算平均分:

當存在多個集合時候,需要計算不同集合同名元素的平均分時候,使用以下操作:

//取一個新集合,將zset1和zset2的值存到zsetavg中,權重比例是對半開

Zinterstore zsetavg 2 zset1 zset2 weights 0.5 0.5

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

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

相關文章

Mistral AI開源 Magistral-Small-2507

宣布Magistral——Mistral AI推出的首款推理模型,專精于垂直領域、具備透明化特性與多語言推理能力。 最優秀的人類思維并非線性——它穿梭于邏輯、洞見、不確定性與發現之間。推理型語言模型讓我們得以將復雜思考和深度理解交由AI增強或代勞,提升了人類…

【Kotlin】如何實現靜態方法?(單例類、伴生對象、@JvmStatic)

靜態方法 靜態方法(類方法):不需要創建實例就可以調用(直接通過類名調用)的方法 Java 中的靜態方法(static) public class Util {public static void doAction() {//...} }調用:Util…

SQL Schema 和Pandas Schema什么意思

在數據處理和分析領域,SQL Schema 和 Pandas Schema 分別指的是在不同數據處理環境中數據的結構定義,以下為你詳細介紹:SQL Schema含義SQL Schema(模式)是數據庫對象的一個邏輯容器,它定義了數據庫中表、視…

機器學習(一)KNN,K近鄰算法(K-Nearest Neighbors)

💡 建議初學者掌握KNN作為理解其他復雜算法(如SVM、決策樹、神經網絡)的基石。K近鄰算法(K-Nearest Neighbors, KNN)詳解:原理、實踐與優化K近鄰算法(K-Nearest NeighboKrs,簡稱KNN&…

Qt 多線程數據庫操作優化

在多線程應用中,數據庫操作往往是性能瓶頸與穩定性風險的高發區。當多個線程同時讀寫數據庫時,若處理不當,輕則出現查詢卡頓、事務沖突,重則導致數據錯亂、連接泄漏甚至程序崩潰。Qt作為跨平臺框架,提供了QSql系列類支…

Qt 狀態機框架:復雜交互邏輯的處理

Qt狀態機框架(Qt State Machine Framework)是一個強大的工具,用于簡化復雜的交互邏輯和狀態管理。它基于UML狀態圖概念,提供了聲明式的方式來定義對象行為,特別適合處理具有多種狀態和轉換的場景(如GUI交互…

【docker】DM8達夢數據庫的docker-compose以及一些啟動踩坑

摘要:本文介紹了通過docker-compose配置啟動達夢數據庫(DM8)的方法。配置包括容器鏡像、端口映射、數據卷掛載以及關鍵環境變量設置(如字符集、大小寫敏感等)。也說明了啟動過程可能遇到的一些問題。通過docker-compose啟動達夢數據庫可以按照…

服務器中的防火墻設置需要打開嗎

服務器中的防火墻屬于是一種保護計算機網絡不會受到未經授權的網絡設備所訪問的技術手段,防火墻還有著將內部網絡和外部網絡進行隔離的功能,在網絡之間創建安全屏障,以此來保護網絡中數據的安全。防火墻是一種網絡安全系統,可以幫…

Java項目:基于SSM框架實現的社區團購管理系統【ssm+B/S架構+源碼+數據庫+畢業論文+答辯PPT+遠程部署】

摘 要 使用舊方法對社區團購信息進行系統化管理已經不再讓人們信賴了,把現在的網絡信息技術運用在社區團購信息的管理上面可以解決許多信息管理上面的難題,比如處理數據時間很長,數據存在錯誤不能及時糾正等問題。 這次開發的社區團購系統有…

介紹一下static關鍵字

在Java中,被static修飾的成員稱為靜態成員,static關鍵字可以用來修飾方法或者成員變量,且被static修飾的方法或者成員變量屬于類方法或者類屬性,也就是說被static修飾的方法或者成員變量不是單獨存儲在某一個對象的空間&#xff0…

【Java學習|黑馬筆記|Day23】網絡編程、反射、動態代理

【DAY23】 文章目錄【DAY23】一.網絡編程1)三要素1.1)IPInetAddress類的使用1.2)端口號1.3)協議2.1)UDP協議發送數據2.2)UDP協議接收數據2.3)UDP的三種通信方式3.1)TCP協議的發送和接…

【Zephyr】Window下的Zephyr編譯和使用

工具下載 參考文檔(Getting Started Guide — Zephyr Project Documentation)中介紹,可以直接通過winget下載: winget download Kitware.CMake Ninja-build.Ninja oss-winget.gperf python Git.Git oss-winget.dtc wget 7zip.7z…

圖論(BFS)構造鄰接表(運用隊列實現搜索)

碼蹄集OJ-夏日漫步 #include<bits/stdc.h> using namespace std; int n; int a[200010],dis[200010],qaq[1000010]; vector<int>son[200010]; int que[200010]; int main( ) {memset(qaq,-1,sizeof(qaq));memset(dis,-1,sizeof(dis));cin>>n;for(int i1;i…

vue怎么實現導入excel表功能

<el-uploadref"upload":action"aaa":on-change"importProject"name"excelFile"multiple:auto-upload"false":show-file-list"false"><el-button type"warning">導入</el-button><…

Linux DNS解析3 -- DNS解析代理配置使用

當網關設備配置了 /etc/hosts 文件時&#xff0c;確實可以為終端設備提供自定義DNS解析功能&#xff0c;但具體效果取決于網關的DNS代理服務配置。下面詳細解釋其工作原理和限制&#xff1a; 一、/etc/hosts 文件的作用 /etc/hosts 是本地靜態域名解析文件&#xff0c;格式為&a…

歷史版本的vscode下載地址

我有點厭惡vscode越來越臃腫的體積&#xff0c;也不需要層出不窮的新功能&#xff0c;于是網上找尋歷史版本。 首先是這個頁面&#xff1a;https://code.visualstudio.com/updates &#xff0c;但最多只顯示兩年&#xff0c;更早的就要手工修改地址欄&#xff0c;我試了最早的…

如何規范化項目執行

要實現項目執行的規范化&#xff0c;應做到以下幾點&#xff1a;制定詳細的項目執行計劃、明確項目團隊角色職責、建立高效溝通與協調機制、實施全面的質量與風險管理、采用合適的項目管理工具。其中&#xff0c;尤其重要的是明確項目團隊角色職責&#xff0c;通過構建清晰的責…

【Rust異步】async和await異步編程實戰:高并發任務處理全解析

?? 歡迎大家來到景天科技苑?? &#x1f388;&#x1f388; 養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者簡介&#xff1a;景天科技苑 &#x1f3c6;《頭銜》&#xff1a;大廠架構師&#xff0c;華為云開發者社區專家博主&#xff0c;…

在Linux上使用DuckCP實現從csv文件匯總數據到SQLite數據庫的表

從pypi網站Duckcp頁面下載duckcp-0.1.1-py3-none-any.whl 一開始用的Python 3.11.2環境。 繼續沿用上文打補丁的方法&#xff0c;得到一個支持python3.11.1的安裝包。 因為缺少zip壓縮工具&#xff0c;使用python程序來完成對修改后文件的重新壓縮。 import os import zipfile…

基于深度學習的圖像分類:使用EfficientNet實現高效分類

前言 圖像分類是計算機視覺領域中的一個基礎任務&#xff0c;其目標是將輸入的圖像分配到預定義的類別中。近年來&#xff0c;深度學習技術&#xff0c;尤其是卷積神經網絡&#xff08;CNN&#xff09;&#xff0c;在圖像分類任務中取得了顯著的進展。EfficientNet是一種新型的…