Redis基礎教程(九):redis有序集合

💝💝💝首先,歡迎各位來到我的博客,很高興能夠在這里和您見面!希望您在這里不僅可以有所收獲,同時也能感受到一份輕松歡樂的氛圍,祝你生活愉快!
💝💝💝如有需要請大家訂閱我的專欄【Redis系列】喲!我會定期更新相關系列的文章
💝💝💝關注!關注!!請關注!!!請大家關注下博主,您的支持是我不斷創作的最大動力!!!

文章目錄

    • 引言
    • 一、Redis 有序集合特性
      • 常用命令
    • 二、實戰案例
      • 場景:用戶排行榜
        • 步驟1:初始化排行榜
        • 步驟2:添加玩家到排行榜
        • 步驟3:獲取排行榜前10名玩家
        • 步驟4:獲取特定分數區間的玩家
        • 步驟5:更新玩家分數
        • 步驟6:移除特定分數區間的玩家
      • 場景:任務隊列按優先級排序
        • 步驟1:初始化任務隊列
        • 步驟2:添加任務到隊列
        • 步驟3:獲取最高優先級的任務
        • 步驟4:移除已完成的任務
    • 總結

引言

Redis 的有序集合(Sorted Set)是一種特殊的數據結構,它結合了集合的唯一性與列表的排序功能,允許你存儲一系列唯一的元素,并為每個元素關聯一個分數(score)。這種數據結構非常適合用于實現排行榜、任務隊列按優先級排序、時間序列數據的存儲與查詢等場景。本文將詳細介紹 Redis 有序集合的基本概念、常用命令,并通過實戰案例展示有序集合在實際項目中的應用。

一、Redis 有序集合特性

有序集合在內部實現上,使用了跳表(Skip List)和字典(Dictionary)兩種數據結構,跳表用于保證元素的快速排序和查找,而字典則用于保證元素的唯一性。有序集合中的元素和分數(score)一起被存儲,這使得你可以按照分數對集合進行排序。

常用命令

  1. ZADD key score member [score member …]

    • 描述:將一個或多個成員元素及其分數加入到有序集合中,如果成員元素已經存在,則更新其分數。
    • 示例:ZADD leaderboard 100 player1 200 player2
  2. ZCARD key

    • 描述:返回有序集合的基數(元素數量)。
    • 示例:ZCARD leaderboard
  3. ZCOUNT key min max

    • 描述:計算在有序集合中指定區間分數的成員數。
    • 示例:ZCOUNT leaderboard 100 200
  4. ZRANGE key start stop [WITHSCORES]

    • 描述:返回有序集合中指定范圍的成員,可以包含分數。
    • 示例:ZRANGE leaderboard 0 10 WITHSCORES
  5. ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

    • 描述:返回有序集合中指定分數區間的成員,可以包含分數。
    • 示例:ZRANGEBYSCORE leaderboard 100 200 WITHSCORES LIMIT 0 10
  6. ZREVRANGE key start stop [WITHSCORES]

    • 描述:返回有序集合中指定范圍的成員,按分數降序排列,可以包含分數。
    • 示例:ZREVRANGE leaderboard 0 10 WITHSCORES
  7. ZREMRANGEBYRANK key start stop

    • 描述:移除有序集合中指定排名范圍的成員。
    • 示例:ZREMRANGEBYRANK leaderboard 0 10
  8. ZREMRANGEBYSCORE key min max

    • 描述:移除有序集合中指定分數范圍的成員。
    • 示例:ZREMRANGEBYSCORE leaderboard 100 200
  9. ZREM key member [member …]

    • 描述:移除有序集合中的一個或多個成員。
    • 示例:ZREM leaderboard player1
  10. ZSCORE key member

    • 描述:返回有序集合中成員的分數。
    • 示例:ZSCORE leaderboard player1

二、實戰案例

場景:用戶排行榜

假設我們正在開發一個在線游戲,需要實時顯示玩家的排行榜,根據玩家的分數進行排序。

步驟1:初始化排行榜
redis-cli DEL leaderboard
步驟2:添加玩家到排行榜
redis-cli ZADD leaderboard 1000 player1
redis-cli ZADD leaderboard 800 player2
redis-cli ZADD leaderboard 1200 player3
步驟3:獲取排行榜前10名玩家
redis-cli ZRANGE leaderboard 0 9 WITHSCORES
步驟4:獲取特定分數區間的玩家
redis-cli ZRANGEBYSCORE leaderboard 800 1000 WITHSCORES
步驟5:更新玩家分數
redis-cli ZADD leaderboard 1100 player1
步驟6:移除特定分數區間的玩家
redis-cli ZREMRANGEBYSCORE leaderboard 800 900

場景:任務隊列按優先級排序

假設我們正在構建一個任務調度系統,需要根據任務的優先級進行調度。

步驟1:初始化任務隊列
redis-cli DEL task_queue
步驟2:添加任務到隊列
redis-cli ZADD task_queue 5 task1
redis-cli ZADD task_queue 10 task2
redis-cli ZADD task_queue 1 task3
步驟3:獲取最高優先級的任務
redis-cli ZRANGE task_queue 0 0 WITHSCORES
步驟4:移除已完成的任務
redis-cli ZREM task_queue task1

喜歡博主的同學,請給博主一丟丟打賞吧↓↓↓您的支持是我不斷創作的最大動力喲!感謝您的支持哦😘😘😘
打賞下吧

💝💝💝如有需要請大家訂閱我的專欄【Redis系列】喲!我會定期更新相關系列的文章
💝💝💝關注!關注!!請關注!!!請大家關注下博主,您的支持是我不斷創作的最大動力!!!

總結

Redis 的有序集合因其獨特的排序和唯一性功能,在排行榜、任務隊列、時間序列數據存儲等多種場景中展現了其強大的應用價值。掌握這些知識和技能,將幫助你更好地利用 Redis 的數據結構特性,提升應用程序的性能和用戶體驗。在實際應用中,有序集合往往與其他數據結構結合使用,以實現更復雜的功能和更精細的數據管理。

Redis相關文章索引文章鏈接
Redis基礎教程(一):redis配置Redis基礎教程(一):redis配置
Redis基礎教程(二):redis數據類型Redis基礎教程(二):redis數據類型
Redis基礎教程(三):redis命令Redis基礎教程(三):redis命令
Redis基礎教程(四):redis鍵(key)Redis基礎教程(四):redis鍵(key)
Redis基礎教程(五):string字符串Redis基礎教程(五):string字符串
Redis基礎教程(六):redis 哈希(Hash)Redis基礎教程(六):redis 哈希(Hash)
Redis基礎教程(七):redis列表(List)Redis基礎教程(七):redis列表(List)
Redis基礎教程(八):redis集合(Set)Redis基礎教程(八):redis集合(Set)

??????覺得有用的話點個贊 👍🏻 唄。
??????本人水平有限,如有紕漏,歡迎各位大佬評論批評指正!😄😄😄
💘💘💘如果覺得這篇文對你有幫助的話,也請給個點贊、收藏下吧,非常感謝!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且長,行則將至,讓我們一起加油吧!🌙🌙🌙

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

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

相關文章

【踩坑】解決undetected-chromedriver報錯cannot connect to-chrome

轉載請注明出處:小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你,歡迎[點贊、收藏、關注]哦~ 更新: 發現一個非常好用的項目,直接內置uc: GitHub - seleniumbase/SeleniumBase: 📊 Pythons all-in…

Python 函數遞歸

以下是一個使用遞歸計算階乘的 Python 函數示例 : 應用場景: 1. 動態規劃問題:在一些需要逐步求解子問題并利用其結果的動態規劃場景中,遞歸可以幫助直觀地表達問題的分解和求解過程。 2. 遍歷具有遞歸結構的數據:如遞…

智能掃地機器人的電源與續航管理策略是什么

智能掃地機器人的電源與續航管理策略是一個綜合性的方案,旨在提高電池利用效率、延長續航時間并優化用戶體驗。以下是一些關鍵的電源與續航管理策略: 智能能源分配系統 動態功率調整:根據清掃任務的需求和電池狀態,智能調整掃地機…

白嫖A100活動-入門篇-1.Linux+InterStudio

進入InterStudio 這節課是為了讓大家熟悉使用InterStudio平臺,以便后續開發 InterStudio平臺是算力平臺,可以通過平臺使用A100,還可以使用“書生”團隊集成好的環境、工具,快速部署LLMs. 進入平臺: 記得報名,獲得免…

Redis IO多路復用

0、前言 本文所有代碼可見 > 【gitee code demo】 本文涉及的主題: 1、BIO、NIO的業務實踐和缺陷 2、Redis IO多路復用:redis快的主要原因 3、epoll 架構 部分圖片 via 【epoll 原理分析】 1、BIO單線程版 1.1 業務代碼 client client代碼相同…

Mongodb索引使用限制

學習mongodb,體會mongodb的每一個使用細節,歡迎閱讀威贊的文章。這是威贊發布的第85篇mongodb技術文章,歡迎瀏覽本專欄威贊發布的其他文章。如果您認為我的文章對您有幫助或者解決您的問題,歡迎在文章下面點個贊,或者關…

Sahi+Yolov10

一、前言 了解到Sahi,是通過切圖,實現提高小目標的檢測效果。sahi 目前支持yolo5\yolo8\mmdet\detection2 等等算法,本篇主要通過實驗onnx加載模型的方式使sahi支持yolov10。 二、代碼 (1)轉換模型 首先使用 conda創…

大數的排列組合公式C代碼

我們知道,計算排列A(n,m)和組合C(n,m)可以用先求階乘的方式實現,但是當數很大時求階乘很容易溢出,所以這里給出非階乘的方式求排列組合 求排列 分母和分子可以抵消,最后代碼如下 unsigned long long A(int n, int m) {unsigned…

華為機試HJ34圖片整理

華為機試HJ34圖片整理 題目: 想法: 將輸入的字符串中每個字符都轉為ASCII碼,再通過快速排序進行排序并輸出 input_str input() input_list [int(ord(l)) for l in input_str]def partition(arr, low, high):i low - 1pivot arr[high]f…

RPC與REST

RPC與REST 訪問遠程服務1遠程服務調用(Remote Procedure Call,RPC):RPC 解決什么問題?如何解決的?為什么要那樣解決?1.1 先解決兩個進程間如何交換數據的問題,也就是進程間通信&…

最新扣子(Coze)實戰案例:使用擴圖功能,讓你的圖任意變換,完全免費教程

🧙?♂? 大家好,我是斜杠君,手把手教你搭建扣子AI應用。 📜 本教程是《AI應用開發系列教程之扣子(Coze)實戰教程》,完全免費學習。 👀 微信關注公從號:斜杠君,可獲取完整版教程。&a…

如何快速搭建python項目的虛擬環境

itopen組織1、提供OpenHarmony優雅實用的小工具2、手把手適配riscv qemu linux的三方庫移植3、未來計劃riscv qemu ohos的三方庫移植 小程序開發4、一切擁抱開源,擁抱國產化 你在開發python工具的時候還一直使用系統默認的環境嗎?是否有遇到有時候…

2024年【北京市安全員-B證】報名考試及北京市安全員-B證最新解析

題庫來源:安全生產模擬考試一點通公眾號小程序 2024年北京市安全員-B證報名考試為正在備考北京市安全員-B證操作證的學員準備的理論考試專題,每個月更新的北京市安全員-B證最新解析祝您順利通過北京市安全員-B證考試。 1、【多選題】《中華人民共和國安…

android輪播圖入門2——觸摸停止與指示器

前言 這次要在上一篇輪播圖的基礎上做改造,增加兩個功能: 用戶觸摸到輪播圖時,停止輪播在輪播圖上展示一個小指示器,指示當前輪播組件的位置 觸摸停播 觸摸停播的設計思路是:監聽實現輪播圖的觸摸事件,…

手把手教你從零開始構建 AI 視頻生成模型

在 GitHub 上發現一篇教程,作者詳細介紹了如何使用 Python 語言,從零開始構建一個文本到視頻生成模型。 涵蓋了從理解理論概念到架構編碼,最終實現輸入文本提示即可生成視頻的全過程。 相關鏈接 GitHub:github.com/FareedKhan-…

python-redis-lock是如何實現鎖自動續期的

python-redis-lock簡介 python-redis-lock是一個python的第三方庫,基于Redis,封裝了分布式鎖的邏輯,提供了更高級的API來簡化鎖的獲取、保持和釋放過程。包括自動續期、鎖超時、重入鎖等功能。 相比于直接使用redis的setnx,避免了…

倒退型自閉癥與輕度自閉癥有什么區別?

作為星貝育園自閉癥兒童康復中心的一名專業教師,我深知家長們在面對自閉癥譜系障礙(ASD)時的種種疑問與挑戰,尤其是關于倒退型自閉癥與輕度自閉癥之間的區別。今天,我將從專業視角出發,深入淺出地解析這兩種…

精通Vim編輯器:Linux系統下的強大文本編輯工具

精通Vim編輯器:Linux系統下的強大文本編輯工具 引言 在Linux世界中,Vim是一個功能強大、高度可定制的文本編輯器,它繼承自經典的vi編輯器并提供了一系列增強功能。無論是系統管理員、開發人員還是普通用戶,掌握Vim的使用都能大幅…

游戲AI的創造思路-技術基礎-強化學習(2)

上一篇中引出了深度強化學習這個大坑,本篇淺淺填一下~~~~ 目錄 6. 深度強化學習概述 6.1. 基本概念 6.2. 發展歷史 6.3. 基本公式 6.4. Python實現 6.5. 運行原理 6.5.1. 核心要素 6.5.2. 運行原理 6.5.3. 典型算法 6.5.4. Python實現代碼 6.6. 優缺點 …

Segmentation fault (core dumped)

錯誤簡介 出現 “Segmentation fault (core dumped)” 錯誤通常意味著程序訪問了未分配的內存或者越界訪問了已分配內存之外的區域。 段錯誤通常發生在以下情況: 空指針解引用:嘗試對空指針進行操作。內存越界:訪問了超出分配內存邊界的區…