Redis 中 Set(例如標簽) 和 ZSet(例如排行榜) 的詳細對比,涵蓋定義、特性、命令、適用場景及總結表格

以下是 Redis 中 Set 和 ZSet 的詳細對比,涵蓋定義、特性、命令、適用場景及總結表格:


1. 核心定義

數據類型SetZSet(Sorted Set)
定義無序的、唯一的字符串集合,元素不重復。有序的、唯一的字符串集合,每個元素關聯一個 分數(score),按分數排序。

2. 核心特性對比

2.1 共同點
  • 元素唯一性:相同元素無法重復添加。
  • 存儲結構:底層基于哈希表實現。
  • 集合運算:支持交集、并集、差集操作(如 SINTERZINTERSTORE)。
2.2 不同點
特性SetZSet
元素排序無序(插入順序不保證)。分數(score) 排序(從小到大默認)。
元素與分數關聯無分數,僅存儲元素值。每個元素必須關聯一個分數(double 類型)。
范圍查詢無法直接按范圍查詢元素。可通過分數范圍(ZRANGEBYSCORE)或索引范圍(ZRANGE)查詢元素。
更新操作僅能通過 SADD 添加或 SREM 刪除元素。可通過 ZADD 修改元素的分數,從而改變其排序位置。
存儲空間僅存儲元素值。需額外存儲元素值和分數,空間占用略高。

3. 常用命令對比

3.1 Set 常用命令
命令功能示例
SADD key member添加元素到集合。SADD tags "spring" "redis"
SMEMBERS key獲取集合所有元素。SMEMBERS tags → 輸出 ["spring", "redis"]
SISMEMBER key member判斷元素是否存在于集合。SISMEMBER tags "spring" → 返回 1(存在)。
SINTER key1 key2計算兩個集合的交集。SINTER tags other_tags → 輸出共同元素。
3.2 ZSet 常用命令
命令功能示例
ZADD key score member添加元素并設置分數。ZADD leaderboard 90 Alice 85 Bob → Alice 分數 90,Bob 分數 85。
ZRANGE key start stop獲取指定索引范圍的元素(按分數升序)。ZRANGE leaderboard 0 -1 → 輸出 ["Bob", "Alice"](按分數升序)。
ZREVRANGE key start stop獲取指定索引范圍的元素(按分數降序)。ZREVRANGE leaderboard 0 -1 → 輸出 ["Alice", "Bob"]
ZRANGEBYSCORE key min max獲取指定分數范圍的元素。ZRANGEBYSCORE leaderboard 80 90 → 輸出分數在 80-90 之間的元素。
ZREM key member刪除指定元素。ZREM leaderboard Alice → 移除 Alice。

4. 適用場景對比

4.1 Set 的典型場景
  • 去重:存儲唯一元素(如用戶標簽、已訪問 URL)。
  • 集合運算:計算多個集合的交集、并集(如共同好友、共同興趣)。
  • 快速存在性判斷:檢查元素是否已存在(如防止重復提交)。
4.2 ZSet 的典型場景
  • 排行榜:按分數排序(如積分排名、銷量排名)。
  • 優先級隊列:分數表示優先級,按分數提取元素(如任務調度)。
  • 帶時間戳的隊列:分數設為時間戳,實現按時間排序的隊列。

5. 總結表格

對比維度SetZSet
排序無序(插入順序不保證)。按分數排序(升序或降序)。
元素與分數無分數,僅存儲值。每個元素關聯一個分數(double 類型)。
范圍查詢不支持分數/索引范圍查詢。支持按分數范圍(ZRANGEBYSCORE)或索引范圍(ZRANGE)查詢。
更新操作無法直接修改元素(只能刪除后重新添加)。可通過修改分數調整元素位置。
適用場景去重、集合運算、存在性判斷。排行榜、優先級隊列、帶權重的有序數據。
存儲空間僅存儲元素值。需額外存儲元素值和分數,空間略高。

6. 選擇建議

  • 選 Set 的場景

    • 需要存儲唯一元素且無需排序。
    • 需要快速判斷元素是否存在。
    • 需要集合運算(如交集、并集)。
  • 選 ZSet 的場景

    • 需要元素按分數排序(如排行榜)。
    • 需要動態調整元素的優先級(如任務隊列)。
    • 需要按分數范圍查詢元素(如篩選高分用戶)。

通過合理選擇,可以最大化 Redis 的性能和功能優勢。

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

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

相關文章

解決Spring參數解析異常:Name for argument of type XXX not specified

前言 在開發 Spring Boot 應用時,我們常遇到類似 java.lang.IllegalArgumentException: Name for argument not specified 的報錯。這類問題通常與方法參數名稱的解析機制相關,尤其在使用 RequestParam、PathVariable 等注解時更為常見。 一、問題現象與…

剛剛,OpenAI開源PaperBench,重塑頂級AI Agent評測

今天凌晨1點,OpenAI開源了一個全新的AI Agent評測基準——PaperBench。 這個基準主要考核智能體的搜索、整合、執行等能力,需要對2024年國際機器學習大會上頂尖論文的復現,包括對論文內容的理解、代碼編寫以及實驗執行等方面的能力。 根據O…

Golang封裝Consul 服務發現庫

以下是一個經過生產驗證的 Consul 服務發現封裝庫,支持注冊/注銷、健康檢查、智能發現等核心功能,可直接集成到項目中: package consulimport ("context""fmt""log""math/rand""net""os""sync"&quo…

自適應信號處理任務(過濾,預測,重建,分類)

自適應濾波 # signals creation: u, v, d N = 5000 n = 10 u = np.sin(np.arange(0, N/10., N/50000

PyTorch深度學習框架 的基礎知識

目錄 1.pyTorch檢查是否安裝成功 2.PyTorch的張量tensor 基礎創建方式(三種) 2.2用列表創建tensor 2.2使用元組創建 tensor 2.3使用ndarray創建創建 tensor 2.4 快速創建tensor的常用方法 3.pyTorch中的張量tensor的常用屬性 4. tensor中的基礎數據…

MySQL學習集--DDL

DDL 數據庫操作 查詢所有數據庫 SHOW DATABASES;查詢當前數據庫 SELECT DATABASE();創建 CREATE DATABASE[IF NOT EXISTS]數據庫名[DEFAULT CHARSET 字符集][COLLATE 排序規則];刪除 DROR DATABASE[IF EXISTS]數據庫名;使用 USE 數據庫名;表操作 創建表格 CREATE TABL…

Vue 3 中按照某個字段將數組分成多個數組

方法一:使用 reduce 方法 const originalArray [{ id: 1, category: A, name: Item 1 },{ id: 2, category: B, name: Item 2 },{ id: 3, category: A, name: Item 3 },{ id: 4, category: C, name: Item 4 },{ id: 5, category: B, name: Item 5 }, ];const grou…

LeetCode刷題 -- 48. 旋轉圖像

題目 算法題解:順時針旋轉矩陣(90度) 1. 算法描述 給定一個 n n 的二維矩陣,請將矩陣順時針旋轉 90 度。 例如: 輸入: [[1,2,3],[4,5,6],[7,8,9] ]輸出: [[7,4,1],[8,5,2],[9,6,3] ]2. 思…

Vulkan進階系列1 - Vulkan應用程序結構(完整代碼)

一: 概述 在前面的20多篇文章中,我們了解了Vulkan的基礎知識,和相關API的使用,接下來我們要從零開始寫一套完整Vulkan應用程序,在這個過程中加深對Vulkan中的各種概念的理解。 Vulkan 應用程序一般遵循 初始化 -> 運行循環 -> 資源清理 的結構,本實例也基本遵循了…

VTK的兩種顯示刷新方式

在類中先聲明vtk的顯示對象 vtkRenderer out_render; vtkVertexGlyphFilter glyphFilter; vtkPolyDataMapper mapper; // 新建制圖器 vtkActor actor; // 新建角色 然后在init中先初始化一下: out_rend…

【CSS3】04-標準流 + 浮動 + flex布局

本文介紹浮動與flex布局。 目錄 1. 標準流 2. 浮動 2.1 基本使用 特點 脫標 2.2 清除浮動 2.2.1 額外標簽法 2.2.2 單偽元素法 2.2.3 雙偽元素法(推薦) 2.2.4 overflow(最簡單) 3. flex布局 3.1 組成 3.2 主軸與側軸對齊方式 3.2.1 主軸 3.2.2 側軸 3.3 修改主…

詳細介紹一下C++的按位運算

在C中,按位運算(Bitwise Operations) 是直接對二進制位(bit)進行操作的低級運算,常用于處理硬件、優化性能、加密算法或底層資源管理。以下是按位運算符的詳細說明、示例和典型應用場景: 1.按位…

Flask與 FastAPI 對比:哪個更適合你的 Web 開發?

在開發 Web 應用時,Python 中有許多流行的 Web 框架可以選擇,其中 Flask 和 FastAPI 是兩款廣受歡迎的框架。它們各有特色,適用于不同的應用場景。本文將從多個角度對比這兩個框架,幫助你更好地選擇適合的框架來構建你的 Web 應用…

Python爬蟲第一戰(爬取優美圖庫網頁圖片)

本文是我在學習過程中記錄學習的點點滴滴,目的是為了學完之后鞏固一下順便也和大家分享一下,日后忘記了也可以方便快速的復習。 爬取網頁圖片 前言前言 今天學習的主要是關于如何利用Python爬取網頁圖片知識的理解和應用 # 1.獲取網頁信息,交給beautifulsoup # 2.獲取頁面里…

J1 ResNet-50算法實戰與解析

🍨 本文為🔗365天深度學習訓練營 中的學習紀錄博客🍖 原作者:K同學啊 | 接輔導、項目定制 一、理論知識儲備 1. 殘差網絡的由來 ResNet主要解決了CNN在深度加深時的退化問題(梯度消失與梯度爆炸)。 雖然B…

Python入門(3):語句

目錄 1 基本語句 1.1 表達式語句 1.2 賦值語句 2 控制流語句 2.1 條件語句 2.2 循環語句 while循環: for循環: 2.3 流程控制語句 1. break語句:退出整個循環體 2. continue語句:只跳過本次循環,還會進…

淺淺嘗試Numpy的函數s:

1.numpy.empty: numpy.empty方法用來創建一個指定形狀(shape),數據類型(dtype)且未被初始化的數組: numpy.empty(shape,dtype float,order C) 參數說明: shape:數組形狀。 dtype:數據類型&am…

【C++】nlohmann::json 配置加載技術實踐:從基礎到高級應用

一、nlohmann::json 庫概況與核心特性 nlohmann::json 是 C 社區最受歡迎的 JSON 庫之一,其設計理念簡潔即美,通過單頭文件實現完整的 JSON 解析、序列化和操作功能。 1.1 基本特性 nlohmann::json是一個現代C編寫的開源JSON庫,采用MIT協議…

運算放大器(四)濾波電路(濾波器)

1.濾波電路概述 濾波電路簡稱濾波器,是一種能使某一部分頻率的信號順利通過,而使其它頻率的信號被大幅衰減的電路。 2.濾波器的分類 (1)低通濾波器:低頻信號能夠通過,而高頻信號不能通過的濾波器稱為低通…