redis的sorted set的應用場景

Redis 的 Sorted Set(有序集合,簡稱 ZSet) 結合了 Set 的去重特性 和 按分數(score)排序 的特性,非常適合需要 高效排序 或 范圍查詢 的場景。以下是它的典型應用場景及示例:

  1. 實時排行榜
    場景:游戲積分榜、電商熱銷榜、熱搜排名
    核心命令:

bash
復制
ZADD leaderboard 5000 “PlayerA” 3000 “PlayerB” # 添加分數
ZREVRANGE leaderboard 0 9 WITHSCORES # 獲取Top10(降序)
ZINCRBY leaderboard 100 “PlayerA” # 增加玩家分數
優勢:

自動按分數排序,無需手動維護順序

支持高效的范圍查詢(如 TopN、第 10-20 名)

  1. 延遲隊列/定時任務
    場景:訂單超時取消、定時提醒
    實現方式:

bash
復制
ZADD delay_queue 1630000000 “task:order:123” # 分數=執行時間戳
ZRANGEBYSCORE delay_queue 0 <當前時間戳> # 獲取到期任務
ZREM delay_queue “task:order:123” # 任務完成后刪除
優勢:

利用分數排序特性自動按時間順序執行任務

避免輪詢數據庫,性能更高

  1. 優先級任務調度
    場景:高優先級任務優先處理
    示例:

bash
復制
ZADD tasks 1 “urgent:report” 3 “normal:cleanup” # 分數越小優先級越高
ZRANGE tasks 0 0 WITHSCORES # 獲取最高優先級任務
4. 時間軸/歷史記錄
場景:用戶瀏覽歷史、操作日志(按時間排序)
命令:

bash
復制
ZADD user:123:history 1629999999 “pageA” 1630000000 “pageB” # 分數=時間戳
ZREVRANGE user:123:history 0 9 # 獲取最近10條記錄
5. 地理位置附近檢索(簡化版)
場景:查找附近的店鋪
實現:

bash
復制
ZADD shops 5.2 “storeA” 3.1 “storeB” # 分數=距離(km)
ZRANGEBYSCORE shops 0 5 # 查找5km內的店鋪
6. 帶權重的標簽系統
場景:熱門標簽排序
操作:

bash
復制
ZINCRBY tags 1 “python” # 標簽熱度+1
ZREVRANGE tags 0 4 # 獲取Top5標簽
7. 滑動窗口統計
場景:統計最近1小時的請求量
實現:

bash
復制
ZADD requests 1629999999 “req1” # 分數=請求時間戳
ZREMRANGEBYSCORE requests -inf <1小時前的時間戳> # 清理舊數據
ZCARD requests # 統計當前請求數
Sorted Set 核心優勢
特性 說明
自動排序 插入時自動按分數排序(O(log N) 復雜度)
高效范圍查詢 ZRANGEBYSCORE、ZRANK 等操作性能優異
去重 成員唯一,適合需要唯一性約束的場景(如用戶投票)
靈活性 分數可重復(如多人同分),成員不可重復
與其他結構對比
需求 String List Hash Set ZSet
需要排序 ? ? ? ? ?
范圍查詢 ? ?? ? ? ?
去重 ? ? ? ? ?
權重/分數關聯 ? ? ? ? ?
性能注意事項
單 ZSet 建議元素數小于 1萬(大數據量時考慮分片)

分數(score)支持 64位浮點數,范圍 -9007199254740992 到 9007199254740992

大數據量范圍查詢時,優先用 ZSCAN 替代 ZRANGE 避免阻塞

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

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

相關文章

18-21源碼剖析——Mybatis整體架構設計、核心組件調用關系、源碼環境搭建

學習視頻資料來源&#xff1a;https://www.bilibili.com/video/BV1R14y1W7yS 文章目錄 1. 架構設計2. 核心組件及調用關系3. 源碼環境搭建3.1 測試類3.2 實體類3.3 核心配置文件3.4 映射配置文件3.5 遇到的問題 1. 架構設計 Mybatis整體架構分為4層&#xff1a; 接口層&#…

未啟用CUDA支持的PyTorch環境** 中使用GPU加速解決方案

1. 錯誤原因分析 根本問題&#xff1a;當前安裝的PyTorch是CPU版本&#xff0c;無法調用GPU硬件加速。當運行以下代碼時會報錯&#xff1a;model YOLO("yolov8n.pt").to("cuda") # 或 .cuda()2. 解決方案步驟 步驟1&#xff1a;驗證CUDA可用性 在Pyth…

JVM-基于Hotspot

前言 Java虛擬機&#xff08;Java Virtual Machine簡稱JVM&#xff09;是運行所有Java程序的抽象計算機&#xff0c;是Java語言的運行環境&#xff0c;其主要任務為將字節碼裝載到內部&#xff0c;解釋/編譯為對應平臺上的機器指令執行。 Java虛擬機規范定義了一個抽象的——…

智能合約安全審計平臺——可視化智能合約漏洞掃描

目錄 可視化智能合約漏洞掃描 —— 理論、實踐與安全保障1. 引言2. 理論背景與漏洞原理2.1 智能合約簡介2.2 常見漏洞類型2.3 漏洞掃描與安全評估原理3. 系統架構與工作流程3.1 系統總體架構3.2 模塊說明4. 漏洞掃描流程詳解4.1 代碼上傳與靜態解析4.2 漏洞模式檢測4.3 風險評估…

【MySQL數據庫】數據類型詳解

目錄 數據類型tinyint類型(整形)bit類型小數浮點數 float、doubledecimal 字符串類型charvarcharchar與varchar的比較 日期時間類型enum和set總結 數據類型 tinyint類型(整形) 例&#xff1a; mysql> create table tt1(num tinyint);mysql> insert into tt1 values(1)…

咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包

咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包&#xff08;內有教程&#xff09; 刷機教程簡單說明&#xff1a; 1、把下載好的刷機包&#xff0c;U盤里建立一個upgrade文件夾&#xff0c;固件放入此文件夾里&#xff0c;放入U盤中&#xff0c;注意升級包為壓縮包不要對…

CS61A:STRING REPRESENTATION

Python 規定所有對象都應該產生兩種不同的字符串表示形式&#xff1a;一種是人類可解釋的文本&#xff0c;另一種是 Python 可解釋的表達式。字符串的構造函數 str 返回一個人類可讀的字符串。在可能的情況下&#xff0c;repr 函數會返回一個計算結果相等的 Python 表達式。rep…

LangChain緩存嵌入技術完全指南:CacheBackedEmbedding原理與實踐(附代碼示例)

一、嵌入緩存技術背景與應用場景 1.1 為什么需要嵌入緩存&#xff1f; 算力消耗問題&#xff1a;現代嵌入模型&#xff08;如text-embedding-3-small&#xff09;單次推理需要約0.5-1秒/文本 資源浪費現狀&#xff1a;實際業務中約30%-60%的文本存在重復計算 成本壓力&#…

精益數據分析(3/126):用數據驅動企業發展的深度解析

精益數據分析&#xff08;3/126&#xff09;&#xff1a;用數據驅動企業發展的深度解析 大家好&#xff01;一直以來&#xff0c;我都堅信在當今競爭激烈的商業環境中&#xff0c;數據是企業獲得競爭優勢的關鍵。最近深入研究《精益數據分析》這本書&#xff0c;收獲頗豐&…

wpf ScaleTransform

在WPF中&#xff0c;ScaleTransform是用于實現元素縮放的核心類&#xff0c;屬于System.Windows.Media命名空間下的變換類型。以下是其主要特性與使用方式的總結&#xff1a; ?核心屬性? ?縮放比例? ScaleX&#xff1a;水平方向縮放比例&#xff08;默認1.0&#xff0c;即…

用純Qt實現GB28181協議/實時視頻/云臺控制/預置位/錄像回放和下載/事件訂閱/語音對講

一、前言 在技術的長河中探索&#xff0c;有些目標一旦確立&#xff0c;便如同璀璨星辰&#xff0c;指引著我們不斷前行。早在2014年&#xff0c;我心中就種下了用純Qt實現GB28181協議的種子&#xff0c;如今回首&#xff0c;一晃十年已逝&#xff0c;好在整體框架和邏輯終于打…

0x01、Redis 主從復制的實現原理是什么?

Redis 主從復制概述 Redis 的主從復制是一種機制&#xff0c;允許一個主節點&#xff08;主實例&#xff09;將數據復制到一個或多個從節點&#xff08;從實例&#xff09;。通過這一機制&#xff0c;從節點可以獲取主節點的數據并與之保持同步。 復制流程 開始同步&#xf…

整活 kotlin + springboot3 + sqlite 配置一個 SQLiteCache

要實現一個 SQLiteCache 也是很簡單的只需要創建一個 cacheManager Bean 即可 // 如果配置文件中 spring.cache.sqlite.enable false 則不啟用 Bean("cacheManager") ConditionalOnProperty(name ["spring.cache.sqlite.enable"], havingValue "t…

深入探索如何壓縮 WebAssembly

一、初始體積&#xff1a;默認 Release 構建 我們從最基礎的構建開始&#xff0c;不開啟調試符號&#xff0c;僅使用默認的 release 模式&#xff1a; $ wc -c pkg/wasm_game_of_life_bg.wasm 29410 pkg/wasm_game_of_life_bg.wasm這是我們優化的起點 —— 29,410 字節。 二…

多角度分析Vue3 nextTick() 函數

nextTick() 是 Vue 3 中的一個核心函數&#xff0c;它的作用是延遲執行某些操作&#xff0c;直到下一次 DOM 更新循環結束之后再執行。這個函數常用于在 Vue 更新 DOM 后立即獲取更新后的 DOM 狀態&#xff0c;或者在組件渲染完成后執行某些操作。 官方的解釋是&#xff0c;當…

前端面試-自動化部署

基礎概念 什么是CI/CD&#xff1f;在前端項目中如何應用&#xff1f;自動化部署相比手動部署有哪些優勢&#xff1f;常見的自動化部署工具有哪些&#xff1f;舉例說明它們的區別&#xff08;如Jenkins vs GitHub Actions&#xff09;。如何通過Git Hook實現自動化部署&#xf…

架構生命周期(高軟57)

系列文章目錄 架構生命周期 文章目錄 系列文章目錄前言一、軟件架構是什么&#xff1f;二、軟件架構的內容三、軟件設計階段四、構件總結 前言 本節講明架構設計的架構生命周期概念。 一、軟件架構是什么&#xff1f; 二、軟件架構的內容 三、軟件設計階段 四、構件 總結 就…

GPTNet如何革新創意與效率

引言 人工智能正在以前所未有的速度改變我們的工作與生活方式&#xff0c;從智能寫作到視覺創作&#xff0c;AI工具已成為不可或缺的伙伴。在眾多平臺中&#xff0c;GPTNet以其強大的功能整合和直觀體驗嶄露頭角。它不僅匯集了GPT系列、Claude、Grok、Gemini等頂級對話模型&am…

【計網】SSL/TLS核心原理

序言 在HTTP協議中&#xff0c;信息是明文傳輸的&#xff0c;因此為了通信安全就有了HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)協議。HTTPS也是一種超文本傳送協議&#xff0c;在HTTP的基礎上加入了SSL/TLS協議&#xff0c;SSL/TLS依靠證書來驗證服務端的…

Web Components 開發與集成

以下是關于 Web Components 開發與集成 的系統知識梳理,涵蓋核心概念、高級特性、集成與優化等內容: 一、Web Components 核心概念 技術作用核心 APICustom Elements定義可復用的自定義 HTML 元素customElements.define()、生命周期鉤子(connectedCallback 等)Shadow DOM封…