欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis?SortedSet數(shù)據(jù)類型及其常用命令總結(jié)

 更新時間:2024年06月26日 11:18:46   作者:喻師傅  
Redis的SortedSet是一個可排序的set集合,與Java中的TreeSet有些類似,但底層數(shù)據(jù)結(jié)構(gòu)卻差別很大,這篇文章主要介紹了Redis?SortedSet數(shù)據(jù)類型及其常用命令詳解,需要的朋友可以參考下

一、Redis概述

Redis概述

在這里插入圖片描述

SortedSet類型

  • Redis的SortedSet是一個可排序的set集合,與Java中的TreeSet有些類似,但底層數(shù)據(jù)結(jié)構(gòu)卻差別很大。
  • SortedSet中的每一個元素都帶有一個score屬性,可以基于score屬性對元素排序,底層的實現(xiàn)是一個跳表(SkipList)加 hash表。
  • 數(shù)據(jù)結(jié)構(gòu)——跳表詳解

SortedSet具備下列特性:

  • 可排序
  • 元素不重復(fù)
  • 查詢速度快

因為SortedSet的可排序特性,經(jīng)常被用來實現(xiàn)排行榜這樣的功能。

1 ZADD:向有序集合添加成員

添加一個或多個元素到sorted set ,如果已經(jīng)存在則更新其score值

在這里插入圖片描述

ZADD 是 Redis 中用于向有序集合添加成員的命令。

ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]

  • key: 有序集合的鍵名。
  • NXXX(可選):用于指定操作的條件,NX 表示只在成員不存在時才添加,XX 表示只在成員已經(jīng)存在時才添加。
  • GTLT(可選):用于指定操作的條件,GT 表示只添加比給定分數(shù)大的成員,LT 表示只添加比給定分數(shù)小的成員。
  • CH(可選):表示將返回值設(shè)置為新增成員的數(shù)量,即使是更新已經(jīng)存在成員的分數(shù)。
  • INCR(可選):表示將成員的分數(shù)與給定的增量相加,而不是將成員的分數(shù)設(shè)置為給定的值。
  • score member [score member ...]: 分數(shù)和成員組成的列表,可以一次性添加多個成員。

返回值

  • 返回值為整數(shù),表示添加的成員數(shù)量,不包括已經(jīng)存在并且分數(shù)被更新的成員。

行為說明

  • 將一個或多個成員添加到有序集合中,或者更新已經(jīng)存在成員的分數(shù)。
  • 如果有序集合不存在,將會創(chuàng)建一個新的有序集合并添加成員。
  • 如果成員已經(jīng)存在于有序集合中,它的分數(shù)將被更新。

示例

  • 向有序集合 zset1 中添加成員 member1member2,并指定分數(shù):
ZADD zset1 10 member1 20 member2

執(zhí)行后:

  • 如果 zset1 不存在,將會被創(chuàng)建并添加成員。
  • 如果 member1 不存在,則添加 member1zset1 并設(shè)置分數(shù)為 10。
  • 如果 member2 不存在,則添加 member2zset1 并設(shè)置分數(shù)為 20。
  • 返回值為添加的成員數(shù)量,這里是 2。

使用場景

  • 排行榜:用于存儲和更新排行榜中的成員和分數(shù)。
  • 數(shù)據(jù)排序:在需要對數(shù)據(jù)進行排序和檢索時使用。

2 ZREM:從有序集合中移除一個或多個成員

在這里插入圖片描述

ZREM 是 Redis 中用于從有序集合中移除一個或多個成員的命令。

ZREM key member [member ...]
  • key: 有序集合的鍵名。
  • member: 要從有序集合中移除的成員。

返回值

  • 返回整數(shù)值,表示被成功移除的成員數(shù)量。

行為說明

  • 從有序集合中移除給定的成員,如果成員不存在于有序集合中,則忽略。
  • 如果有序集合在移除成員后變?yōu)榭占?,將自動刪除該有序集合的鍵。

示例

有序集合 zset1,其中包含成員 member1、member2member3

ZADD zset1 10 member1 20 member2 30 member3

從有序集合 zset1 中移除成員 member2

ZREM zset1 member2

執(zhí)行后:

  • zset1 中將只剩下成員 member1member3。
  • 返回值為 1,表示成功移除了一個成員。

嘗試移除不存在的成員 member4

ZREM zset1 member4

執(zhí)行后:

  • zset1 保持不變,因為成員 member4 不存在。
  • 返回值為 0,表示沒有移除任何成員。

注意事項

  • ZREM 命令是原子的,這意味著在命令執(zhí)行過程中不會有其他客戶端能夠?qū)υ撚行蚣线M行操作。
  • 如果有序集合在移除成員后變?yōu)榭占?,將自動刪除該有序集合的鍵。

3 ZSCORE : 獲取sorted set中的指定元素的score值

在這里插入圖片描述

ZSCORE 是 Redis 中用于獲取有序集合中指定成員的分數(shù)的命令。

ZSCORE key member
  • key: 有序集合的鍵名。
  • member: 要查詢分數(shù)的成員。

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZSCORE myzset "one"
"1"

返回字符串形式的成員分數(shù)。如果成員不存在于有序集合中,則返回 nil。

行為說明

  • 查詢并返回有序集合中指定成員的分數(shù)。
  • 如果有序集合或成員不存在,將返回 nil

示例

有序集合 zset1,其中包含成員 member1member2member3,其分數(shù)分別為 102030

ZADD zset1 10 member1 20 member2 30 member3

查詢 member2 的分數(shù):

ZSCORE zset1 member2

執(zhí)行后:

  • 返回值為 "20",表示 member2 的分數(shù)是 20。

查詢不存在的成員 member4 的分數(shù):

ZSCORE zset1 member4

執(zhí)行后:

返回值為 nil,因為 member4 不存在于 zset1 中。

注意事項

ZSCORE 命令是只讀的,不會修改有序集合的內(nèi)容。返回值是字符串形式的分數(shù),即使實際分數(shù)是一個整數(shù)。

4 ZRANK:獲取sorted set 中的指定元素的排名

在這里插入圖片描述

ZRANK 是 Redis 中用于獲取有序集合中指定成員的排名(索引)的命令。

ZRANK key member [WITHSCORE]
  • key: 有序集合的鍵名。
  • member: 要查詢排名的成員。
  • WITHSCORE: 可選參數(shù),如果指定了 WITHSCORE,則返回成員的排名和分數(shù)。

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANK myzset "three"
(integer) 2
redis> ZRANK myzset "four"
(nil)
redis> ZRANK myzset "three" WITHSCORE
1) (integer) 2
2) "3"
redis> ZRANK myzset "four" WITHSCORE
(nil)

如果成員存在于有序集合中,返回成員的排名(從 0 開始)。如果成員不存在于有序集合中,返回 nil。

如果指定了 WITHSCORE 參數(shù),返回值將是一個包含排名和分數(shù)的數(shù)組:[排名, 分數(shù)]。

行為說明

  • 查詢并返回有序集合中指定成員的排名。
  • 如果有序集合中存在多個相同分數(shù)的成員,排名按照成員的字典順序進行排序。

示例

有序集合 zset1,其中包含成員 member1member2member3,其分數(shù)分別為 10、2030

ZADD zset1 10 member1 20 member2 30 member3

查詢 member2 的排名:

ZRANK zset1 member2

執(zhí)行后:

返回值為 1,表示 member2 在有序集合中的排名是第二位(索引從 0 開始)。

查詢 member4 的排名:

ZRANK zset1 member4

執(zhí)行后:

  • 返回值為 nil,因為 member4 不存在于 zset1 中。

使用 WITHSCORE 參數(shù)查詢 member2 的排名和分數(shù):

ZRANK zset1 member2 WITHSCORE

執(zhí)行后:

  • 返回值為 ["1", "20"],表示 member2 的排名是第二位,分數(shù)是 20。

注意事項

  • ZRANK 命令只讀,不會修改有序集合的內(nèi)容。如果有序集合中存在多個相同分數(shù)的成員,排名將按照成員的字典順序進行排序。

5 ZCARD:獲取sorted set中的元素個數(shù)

在這里插入圖片描述

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZCARD myzset
(integer) 2

6 ZCOUNT:統(tǒng)計score值在給定范圍內(nèi)的所有元素的個數(shù)

在這里插入圖片描述

ZCOUNT 是 Redis 中用于獲取有序集合中指定分數(shù)范圍內(nèi)的成員數(shù)量的命令。

ZCOUNT key min max
  • key: 有序集合的鍵名。
  • min: 分數(shù)范圍的下限。
  • max: 分數(shù)范圍的上限。

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZCOUNT myzset -inf +inf
(integer) 3
redis> ZCOUNT myzset (1 3
(integer) 2

返回指定分數(shù)范圍內(nèi)的成員數(shù)量。

行為說明

  • 查詢并返回有序集合中分數(shù)在給定范圍內(nèi)的成員數(shù)量,包括邊界的成員。

示例

有序集合 zset1,其中包含成員 member1、member2member3,其分數(shù)分別為 10、2030

ZADD zset1 10 member1 20 member2 30 member3

查詢分數(shù)在 [15, 25] 范圍內(nèi)的成員數(shù)量:

ZCOUNT zset1 15 25

執(zhí)行后:

假設(shè)有序集合中沒有相同分數(shù)的成員,返回值將是 1,因為只有 member2 的分數(shù)在 1525 之間。

7 ZINCRBY:讓sorted set中的指定元素自增,步長為指定的increment值

在這里插入圖片描述

ZINCRBY 是 Redis 中用于對有序集合中指定成員的分數(shù)進行增加或減少的命令。

ZINCRBY key increment member
  • key: 有序集合的鍵名。
  • increment: 要增加(正數(shù))或減少(負數(shù))的分數(shù)。
  • member: 要增加或減少分數(shù)的成員。

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZINCRBY myzset 2 "one"
"3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"

返回成員的新分數(shù)。

行為說明

  • 如果給定的成員不存在于有序集合中,將會新增該成員并設(shè)置初始分數(shù)。
  • 如果給定的成員在有序集合中存在,將會更新該成員的分數(shù)。

示例

有序集合 zset1,其中包含成員 member1member2,它們的分數(shù)分別是 1020

ZADD zset1 10 member1 20 member2

member1 的分數(shù)增加 5

ZINCRBY zset1 5 member1

執(zhí)行后:

返回值為 15,表示 member1 的新分數(shù)是 15。

再將 member2 的分數(shù)減少 3.5

ZINCRBY zset1 -3.5 member2

執(zhí)行后:

  • 返回值為 16.5,表示 member2 的新分數(shù)是 16.5

注意事項

  • ZINCRBY 命令可以增加或減少有序集合中成員的分數(shù),如果成員不存在,會新增該成員并設(shè)置初始分數(shù)。

8 ZRANGE:按照score排序后,獲取指定排名范圍內(nèi)的元素

在這里插入圖片描述

ZRANGE 是 Redis 中用于獲取有序集合中指定范圍內(nèi)成員的命令。

支持多種選項來定制輸出結(jié)果,包括按分數(shù)、字典順序排序,反向排序,以及包含成員分數(shù)等。

ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
  • key: 有序集合的鍵名。
  • start: 開始位置(索引)。
  • stop: 結(jié)束位置(索引)。
  • BYSCORE: 按分數(shù)排序。
  • BYLEX: 按字典順序排序。
  • REV: 反向排序。
  • LIMIT offset count: 返回結(jié)果的限制和偏移量。
  • WITHSCORES: 包含分數(shù)在輸出結(jié)果中。

參數(shù)說明

  • startstop 可以是負數(shù),表示從集合末尾開始計算。例如,-1 表示最后一個元素,-2 表示倒數(shù)第二個元素,依此類推。
  • BYSCOREBYLEX 不能同時使用。
  • REV 可與 BYSCOREBYLEX 一起使用,使得結(jié)果按指定順序的反向輸出。
  • LIMIT offset count 用于分頁,offset 表示偏移量,count 表示返回的最大元素數(shù)量。
  • WITHSCORES 將成員的分數(shù)一起返回。

示例

有序集合 zset1,其中包含以下成員和分數(shù):

ZADD zset1 1 "one" 2 "two" 3 "three" 4 "four"

獲取索引從 0 到 2 的成員:

ZRANGE zset1 0 2

返回:

1) "one"
2) "two"
3) "three"

獲取索引從 0 到 2 的成員,并包含分數(shù):

ZRANGE zset1 0 2 WITHSCORES

返回:

1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"

按分數(shù)范圍獲取成員,從分數(shù) 1 到 3:

ZRANGE zset1 1 3 BYSCORE

返回:

1) "one"
2) "two"
3) "three"

按字典順序獲取成員,并反向排列:

ZRANGE zset1 - + BYLEX REV

返回:

1) "two"
2) "three"
3) "one"
4) "four"

使用 LIMIT 選項來進行分頁,獲取按分數(shù)排序后的前兩個成員:

ZRANGE zset1 -inf +inf BYSCORE LIMIT 0 2

返回:

1) "one"
2) "two"

9 ZDIFF、ZINTER、ZUNION:求差集、交集、并集 ZDIFF

在這里插入圖片描述

ZDIFF 用于計算多個有序集合之間的差集,并將結(jié)果存儲在新的有序集合中。

ZDIFF numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
  • numkeys: 要進行差集計算的有序集合數(shù)量。
  • key: 要進行差集計算的有序集合鍵名。
  • WEIGHTS weight [weight ...]: 可選參數(shù),用于指定每個有序集合的權(quán)重,默認為 1。
  • AGGREGATE SUM|MIN|MAX: 可選參數(shù),指定計算交集時如何聚合分數(shù),默認為 SUM。

示例:

ZDIFF 3 zset1 zset2 zset3 WEIGHTS 2 3 1 AGGREGATE MAX

ZINTER

ZINTER 用于計算多個有序集合的交集,并將結(jié)果存儲在新的有序集合中。

ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

參數(shù)說明與 ZDIFF 類似,不同之處在于計算的是交集。

示例:

ZINTER 3 zset1 zset2 zset3 WEIGHTS 2 3 1 AGGREGATE MAX

ZUNION

在這里插入圖片描述

ZUNION 用于計算多個有序集合的并集,并將結(jié)果存儲在新的有序集合中。

ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

參數(shù)說明與 ZDIFFZINTER 類似,不同之處在于計算的是并集。

示例:

ZUNION 3 zset1 zset2 zset3 WEIGHTS 2 3 1 AGGREGATE MAX

更多的SortedSet命令可以去官網(wǎng)https://redis.io/docs/latest/commands/?group=sorted-set查看哦~

在這里插入圖片描述

到此這篇關(guān)于Redis SortedSet數(shù)據(jù)類型及其常用命令詳解的文章就介紹到這了,更多相關(guān)Redis SortedSet數(shù)據(jù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis事務(wù)如何解決超賣問題

    redis事務(wù)如何解決超賣問題

    使用Redis事務(wù)可以有效避免超賣問題,首先,通過MULTI命令開啟事務(wù),將需要執(zhí)行的多個命令加入到事務(wù)中,然后通過EXEC命令提交事務(wù),確保這些命令可以一次性、順序地執(zhí)行,在事務(wù)執(zhí)行期間,Redis服務(wù)器不會執(zhí)行其他客戶端的命令
    2024-11-11
  • 關(guān)于Redis未授權(quán)訪問的問題

    關(guān)于Redis未授權(quán)訪問的問題

    這篇文章主要介紹了Redis未授權(quán)訪問的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • 深入解析RedisJSON之如何在Redis中直接處理JSON數(shù)據(jù)

    深入解析RedisJSON之如何在Redis中直接處理JSON數(shù)據(jù)

    JSON已經(jīng)成為現(xiàn)代應(yīng)用程序之間數(shù)據(jù)傳輸?shù)耐ㄓ酶袷?然而,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在處理JSON數(shù)據(jù)時可能會遇到性能瓶頸,本文將詳細介紹RedisJSON的工作原理、關(guān)鍵操作、性能優(yōu)勢以及使用場景,感興趣的朋友一起看看吧
    2024-05-05
  • springboot +redis 實現(xiàn)點贊、瀏覽、收藏、評論等數(shù)量的增減操作

    springboot +redis 實現(xiàn)點贊、瀏覽、收藏、評論等數(shù)量的增減操作

    這篇文章主要介紹了springboot +redis 實現(xiàn)點贊、瀏覽、收藏、評論等數(shù)量的增減操作,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Redisson如何解決redis分布式鎖過期時間到了業(yè)務(wù)沒執(zhí)行完問題

    Redisson如何解決redis分布式鎖過期時間到了業(yè)務(wù)沒執(zhí)行完問題

    這篇文章主要介紹了Redisson如何解決redis分布式鎖過期時間到了業(yè)務(wù)沒執(zhí)行完問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • redis主從連接不成功錯誤問題及解決

    redis主從連接不成功錯誤問題及解決

    這篇文章主要介紹了redis主從連接不成功錯誤問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教<BR>
    2024-01-01
  • Rocky9部署redis的實現(xiàn)示例

    Rocky9部署redis的實現(xiàn)示例

    本文主要介紹了Rocky9部署redis的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 淺析PHP分布式中Redis實現(xiàn)Session的方法

    淺析PHP分布式中Redis實現(xiàn)Session的方法

    這篇文章主要介紹了PHP分布式中Redis實現(xiàn)Session的方法,文中詳細介紹了兩種方法的使用方法,并給出了測試的示例代碼,有需要的朋友可以參考借鑒,下面來一起看看吧,
    2016-12-12
  • Redis IP地址的綁定的實現(xiàn)

    Redis IP地址的綁定的實現(xiàn)

    這篇文章主要介紹了Redis IP地址的綁定的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 基于Redis實現(xiàn)短信驗證碼登錄功能

    基于Redis實現(xiàn)短信驗證碼登錄功能

    對于我們用戶來講,我們在登陸一個APP的時候,有很多種登陸方式,比如"微信掃碼"、"手機號登陸"、"支付寶掃碼"、"賬號密碼登錄",現(xiàn)在大多都會要求微信掃碼登錄或者是手機號驗證碼登錄,所以本文給大家介紹了基于Redis實現(xiàn)短信驗證碼登錄功能,需要的朋友可以參考下
    2025-01-01

最新評論