Redis數據結構之ZSet

目錄

    • 1.概述
    • 2.常見操作
      • 2.1 ZADD
      • 2.2 ZRANGE
      • 2.3 ZREVRANGE
      • 2.4 ZRANGEBYSCORE
      • 2.5 ZSCORE
      • 2.6 ZCARD
      • 2.6 ZREM
      • 2.7 ZINCRBY
      • 2.8 ZCOUNT
      • 2.9 ZMPOP
      • 2.10 ZRANK
      • 2.11 ZREVRANK
    • 3.總結

1.概述

  • ZSet和Set一樣也是String類型元素的集合,且不允許重復的成員,不同的是ZSet每個元素都會關聯一個double類型的分數,Redis正是通過分數來為集合中的成員進行從小到大的排序。
  • ZSet的成員是唯一的,但分數(score)卻可以重復。
  • ZSet集合是通過哈希表實現的,所以添加,刪除,査找的復雜度都是O(1)。
  • ZSet集合中最大的成員數為232-1。

在這里插入圖片描述

2.常見操作

2.1 ZADD

向有序集合中添加元素和元素的分數

ZADD key score member [score member ...]

例:

127.0.0.1:6379> zadd zset1 10 v1 20 v2 30 v3 40 v4
(integer) 4

2.2 ZRANGE

遍歷,0到-1代表遍歷所有,WITHSCORES結果帶著分數

ZRANGE key start stop [WITHSCORES]

例:遍歷

127.0.0.1:6379> zrange zset1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"

例:遍歷,結果帶著分數

127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"

2.3 ZREVRANGE

根據分數反轉

127.0.0.1:6379> ZREVRANGE zset1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> ZREVRANGE zset1 0 -1 withscores
1) "v4"
2) "40"
3) "v3"
4) "30"
5) "v2"
6) "20"
7) "v1"
8) "10"

2.4 ZRANGEBYSCORE

獲取指定分數范圍的元素

ZRANGEBYSCORE key [(]min max [WITHSCORES] [LIMIT offset count]

(:不包含
min:分數from
max:分數to
offset:開始下標
count:數量

例:獲取分數區間[20, 30]的元素

127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"
127.0.0.1:6379> ZRANGEBYSCORE zset1 20 30
1) "v2"
2) "v3"
127.0.0.1:6379> ZRANGEBYSCORE zset1 20 30 withscores
1) "v2"
2) "20"
3) "v3"
4) "30"

例:獲取分數區間(20, 40]的元素

127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"
127.0.0.1:6379> ZRANGEBYSCORE zset1 (20 40
1) "v3"
2) "v4"

例:limit限制返回的數量

127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"
127.0.0.1:6379> ZRANGEBYSCORE zset1 10 40 limit 1 2
1) "v2"
2) "v3"

2.5 ZSCORE

獲取元素分數

127.0.0.1:6379> zscore zset1 v3
"30"

2.6 ZCARD

元素個數

127.0.0.1:6379> zcard zset1 
(integer) 4

2.6 ZREM

刪除某個元素

127.0.0.1:6379> zrem zset1 v3 
(integer) 1

2.7 ZINCRBY

為元素member增加分數increment

ZINCRBY key increment member

例:對元素v1加3分

127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v4"
6) "40"
127.0.0.1:6379> zincrby zset1 3 v1
"13"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "v1"
2) "13"
3) "v2"
4) "20"
5) "v4"
6) "40"

2.8 ZCOUNT

獲得指定分數范圍內的元素個數

min: 最小分數
max: 最大分數

ZCOUNT key min max

例:

127.0.0.1:6379> zrange zset1 0 -1 WITHSCORES1) "v1"2) "10"3) "v2"4) "20"5) "v3"6) "30"7) "v4"8) "40"9) "v5"
10) "50"
11) "v6"
12) "60"
13) "v7"
14) "70"
127.0.0.1:6379> zcount zset1  30 50
(integer) 3

2.9 ZMPOP

7.0新特性,在指定的numkeys個集合中,彈出分數最大(MAX)或最小(MIN)的count個元素(分數和值成對),可以實現在一個或多個集合中,取出最小或最大的幾個元素

ZMPOP numkeys key [key ...] <MIN | MAX> [COUNT count]

例:在1個zset1集合中,彈出最小的1個元素

127.0.0.1:6379> zrange zset1 0 -1 WITHSCORES1) "v1"2) "10"3) "v2"4) "20"5) "v3"6) "30"7) "v4"8) "40"9) "v5"
10) "50"
11) "v6"
12) "60"
13) "v7"
14) "70"
127.0.0.1:6379> ZMPOP 1 zset1 min count 1
1) "zset1"
2) 1) 1) "v1"2) "10"
127.0.0.1:6379> 

2.10 ZRANK

正序下標,集合的某個元素,正序處于集合第幾個

127.0.0.1:6379> zrange zset1 0 -1
1) "v2"
2) "v3"
3) "v4"
4) "v5"
5) "v6"
6) "v7"
127.0.0.1:6379> zrank zset1 v2
(integer) 0
127.0.0.1:6379> zrank zset1 v3
(integer) 1
127.0.0.1:6379> zrank zset1 v4
(integer) 2
127.0.0.1:6379> zrank zset1 v5
(integer) 3

2.11 ZREVRANK

倒序下標,集合的某個元素,倒序處于集合第幾個

127.0.0.1:6379> zrange zset1 0 -1
1) "v2"
2) "v3"
3) "v4"
4) "v5"
5) "v6"
6) "v7"
127.0.0.1:6379> zrevrank zset1 v2
(integer) 5
127.0.0.1:6379> zrevrank zset1 v3
(integer) 4
127.0.0.1:6379> zrevrank zset1 v4
(integer) 3
127.0.0.1:6379> zrevrank zset1 v5
(integer) 2

3.總結

排序集合大量應用于項目,例如實時展示熱銷商品統計,打賞點贊數量排行榜統計。將銷量和點贊打賞數作為分數綁定在值上面即可。

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

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

相關文章

什么是DHCP服務,在生活中的應用是什么?

提起DHCP&#xff0c;不接觸互聯網的可能會很陌生&#xff0c;其實并沒有這么高深&#xff0c;簡明扼要的說就是可以自動為連接的設備分配IP地址&#xff0c;子網掩碼&#xff0c;網關&#xff0c;dns等網絡參數。使連接步驟簡化&#xff0c;從而提高效率。 主要功能&#xff…

2025 AI智能數字農業研討會在蘇州啟幕,科技助農與數據興業成焦點

4月2日&#xff0c;以"科技助農數據興業”為主題的2025AI智能數字農業研討會在蘇州國際博覽中心盛大啟幕。本次盛會吸引了來自全國各地相關部門領導、知名專家學者、行業協會組織&#xff0c;以及縣級市農業企業代表、縣級市農產品銷售商等萬名嘉賓齊聚姑蘇城&#xff0c;…

論文導讀 | SOSP23 | Gemini:大模型 內存CheckPoint 快速故障恢復

本期分享的是一篇SOSP 2023論文&#xff1a; Gemini: Fast Failure Recovery in Distributed Training with In-Memory Checkpoints Zhuang Wang (Rice University), Zhen Jia (Amazon Web Services, Inc.), Shuai Zheng (Amazon Web Services), Zhen Zhang (Amazon Web Servic…

wordpress可視化數據采集Scrapes插件,WP博客網站自動采集發布

源碼介紹 wordpress自動采集Scrapes插件&#xff0c;支持ripro&#xff0c;modown&#xff0c;子比&#xff0c;7b2等多種WordPress主題 支持PHP7.4&#xff0c;PHP8.0及以上不支持 上傳插件到wp-content/plugins目錄&#xff0c;然后解壓 不需要寫采集規則&#xff0c;傻瓜式…

JavaScript Math(算數)指南

JavaScript Math&#xff08;算數&#xff09;指南 引言 JavaScript的Math對象是一個內置對象&#xff0c;提供了進行數學運算的方法和值。它對于執行基本的數學計算、生成隨機數以及執行更復雜的數學操作非常有用。本文將詳細介紹JavaScript中的Math對象&#xff0c;涵蓋其常…

Deep Reinforcement Learning for Robotics翻譯解讀

a. 機器人能力 1 單機器人能力&#xff08;Single-robot competencies&#xff09; 運動能力&#xff08;Mobility&#xff09; 行走&#xff08;Locomotion&#xff09;導航&#xff08;Navigation&#xff09; 操作能力&#xff08;Manipulation&#xff09; 靜態操作&…

最新扣子(Coze)案例教程:最新抖音視頻文案提取方法替代方案,音頻視頻提取文案插件制作,手把手教學,完全免費教程

&#x1f468;?&#x1f4bb; 星球群同學反饋&#xff0c;扣子平臺的視頻提取插件已下架&#xff0c;很多智能體及工作流不能使用&#xff0c;斜杠君這里研究了一個替代方案分享給大家。 方案原理&#xff1a;無論是任何視頻或音頻轉文案&#xff0c;我們提取的方式首先都是要…

yum list查詢時部分包查找不到流程分析

以下是針對 yum list available -c xxx.repo&#xff08;對應 DNF 的命令行操作&#xff09;的詳細流程解讀&#xff0c;包括參數解析、配置初始化、元數據加載、數據庫查詢&#xff0c;以及讀取不到特定包的場景分析。 1. 命令行參數解析與入口函數 代碼入口: dnf.cli.main.m…

k8s 1.23升級1.24

0、簡介 這里只用3臺服務器來做一個簡單的集群&#xff0c;當前版本是1.23.17目標升級到1.24.17 地址主機名192.168.160.40kuber-master-1192.168.160.41kuber-master-2192.168.160.42kuber-node-1 我這里設置的master2可調度pod&#xff0c;將master2的污點去掉 kubectl de…

# 實時人臉識別系統:基于 OpenCV 和 Python 的實現

實時人臉識別系統&#xff1a;基于 OpenCV 和 Python 的實現 在當今數字化時代&#xff0c;人臉識別技術已經廣泛應用于各種場景&#xff0c;從手機解鎖到安防監控&#xff0c;再到智能門禁系統。今天&#xff0c;我將通過一個完整的代碼示例&#xff0c;詳細講解如何使用 Pyt…

Linux:(五種IO模型)

目錄 一、對IO的重新認識 二、IO的五種模型 1.阻塞IO 2.非阻塞IO 3.信號驅動IO 4.IO多路轉接 5.異步IO 6.一些概念的解釋 三、非阻塞IO的代碼實現 1.fcntl 2.實現主程序 一、對IO的重新認識 如果有人問你IO是什么&#xff0c;你該怎么回答呢&#xff1f; 你可能會說…

將電腦控制手機編寫為MCP server

文章目錄 電腦控制手機后,截屏代碼復習MCP server構建修改MCP的config文件測試效果困惑電腦控制手機后,截屏代碼復習 def capture_window(hwnd: int, filename: str = None) -> dict:""&

[ctfshow web入門] web6

前置知識 入口點(目錄)爆破 還記得之前說過網站的入口的嗎&#xff0c;我們輸入url/xxx&#xff0c;其中如果url/xxx存在&#xff0c;那么訪問成功&#xff0c;證明存在這樣一個入口點&#xff1b;如果訪問失敗則證明不存在此入口點。所以我們可以通過遍歷url/xxx&#xff0c;…

【計算機網絡】Linux配置SNAT策略

什么是NAT&#xff1f; NAT 全稱是 Network Address Translation&#xff08;網絡地址轉換&#xff09;&#xff0c;是一個用來在多個設備共享一個公網 IP上網的技術。 NAT 的核心作用&#xff1a;將一個網絡中的私有 IP 地址&#xff0c;轉換為公網 IP 地址&#xff0c;從而…

Mathematics | Branch

注&#xff1a;本文為“遇見數學”翻譯的 “數學分支概覽” 兩篇文章合輯。 數學世界的版圖&#xff1a;主要分支概覽&#xff08;上&#xff09; 原創 遇見數學 2025 年 04 月 03 日 12:02 河南 數學的分支&#xff08;Areas of Mathematics&#xff09; 在文藝復興之前&am…

Ubuntu(CentOS、Rockylinux等)快速進入深度學習pytorch環境

這里寫自定義目錄標題 安裝進入系統&#xff08;如Ubuntu22.04&#xff09;安裝anacondapip、conda換源pip換源conda換源 安裝nvidia安裝pytorch環境針對于wsl的優化 安裝進入系統&#xff08;如Ubuntu22.04&#xff09; docker 、 wsl 、 雙系統 、服務器系統 推薦 Ubuntu 20…

什么是混雜模式?為什么 macvlan 依賴它

在 macvlan 場景中&#xff0c;物理網絡是否支持混雜模式&#xff08;Promiscuous Mode&#xff09; 直接影響 macvlan 虛擬接口的通信能力。以下是詳細解釋和操作指南&#xff1a; 一、什么是混雜模式&#xff1f;為什么 macvlan 依賴它&#xff1f; 混雜模式的定義 當物理網絡…

物理數據流圖

物理數據流圖&#xff08;Physical Data Flow Diagram, PDFD&#xff09;詳解 物理數據流圖是結構化系統分析中的一種建模工具&#xff0c;用于描述系統在物理環境下的具體實現方式&#xff0c;包括硬件、軟件、人工操作和物理文件等實際組成部分。它與**邏輯數據流圖&#xf…

Linux開發工具——vim

&#x1f4dd;前言&#xff1a; 上篇文章我們講了Linux開發工具——apt&#xff0c;這篇文章我們來講講Linux開發工具——vim &#x1f3ac;個人簡介&#xff1a;努力學習ing &#x1f4cb;個人專欄&#xff1a;Linux &#x1f380;CSDN主頁 愚潤求學 &#x1f304;其他專欄&a…

在 Langflow 中構建靈活的自定義組件:從基礎到高級實踐

本文深入探討了如何在 Langflow 平臺中創建功能豐富的自定義組件。通過詳細的目錄結構解析、分步實現指南和多個實戰案例&#xff0c;幫助開發者掌握利用 Python 生態擴展低代碼平臺的方法&#xff0c;打造高效的數據處理流程。 理解組件架構設計 自定義組件是在 Langflow 中創…