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

Redis中Zset類型常用命令的實現(xiàn)

 更新時間:2024年10月17日 09:46:51   作者:時光不染?;貞洸坏? 
Zset是Redis的一種有序集合數(shù)據(jù)類型,Zset通過壓縮列表和跳躍表兩種底層編碼方式支持小數(shù)據(jù)集和大數(shù)據(jù)集,支持多種操作,包括添加、查詢、刪除元素以及集合運算等,具有不同的時間復(fù)雜度,感興趣的可以了解一下

一. Zset有序集合簡介.

  • 定義: Zset(有序集合)是Redis中的一種數(shù)據(jù)類型,它保留了集合不能有重復(fù)成員的特點,但與普通集合不同的是,Zset中的每個元素都與一個唯一的浮點類型的分?jǐn)?shù)(score)相關(guān)聯(lián),這使得Zset中的元素可以維護(hù)有序性。

  • 如何保證有序性: 每個元素都與一個分?jǐn)?shù)相關(guān)聯(lián),分?jǐn)?shù)用于確定元素在集合中的位置,且分?jǐn)?shù)可以重復(fù)。當(dāng)分?jǐn)?shù)相同時,元素會根據(jù)其字典順序進(jìn)行排序。

  • **Zset在Redis中底層的編碼方式:

    • 壓縮列表(ziplist):一種緊湊的數(shù)據(jù)結(jié)構(gòu),通常用于存儲元素較少、元素較小的有序集合。它以連續(xù)的內(nèi)存塊形式存儲數(shù)據(jù),每個節(jié)點可以包含一個或多個元素,且可以非常緊湊地存儲整數(shù)和字符串等不同類型的元素。
    • 跳躍表(skiplist):一種基于鏈表的數(shù)據(jù)結(jié)構(gòu),通常用于存儲元素較多、元素較大的有序集合。跳躍表通過多層鏈表實現(xiàn)快速查找,其插入、刪除、查找的時間復(fù)雜度均為O(logN)。

二. 添加元素相關(guān)命令.

2.1 向有序集合中添加元素(zadd)

  • 命令基本格式:

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

解釋參數(shù)含義:

  • NX: 當(dāng)number不存在的時候才會添加對應(yīng)的score-number
  • XX: 當(dāng)number存在的時候才會修改對應(yīng)的score-number
  • GT: 當(dāng)更新元素的時候, 只有當(dāng)給定的score比已有的score大, 才會更新成功.
  • LT: 當(dāng)更新元素的時候, 只有當(dāng)給定的score比已有的score小, 才會更新成功.
  • CH: 將返回值從添加的新元素數(shù)修改為更改的元素總數(shù)(CH是changed的縮寫)。更改的元素是添加的新元素和已經(jīng)存在的元素,并為其更新了分?jǐn)?shù)。因此,在命令行中指定的具有與過去相同分?jǐn)?shù)的元素不會被計算在內(nèi)。注意:通常ZADD的返回值只計算添加的新元素的數(shù)量
  • INCR:當(dāng)指定這個選項時,ZADD的行為類似于ZINCRBY。在這種模式下只能指定一個分?jǐn)?shù)-元素對

時間復(fù)雜度:

O(log(N)),其中N是排序集合中元素的個數(shù)。

演示命令的使用:

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

三. 查詢元素相關(guān)操作.

3.1 查詢有序集合中的元素個數(shù)( zcard zcount)

命令基本格式:

ZCARD keyZCOUNT key min max

時間復(fù)雜度:

zcard O(1)zcount O(log(N)) N是排序集合中元素的個數(shù)。

演示命令的使用:

在這里插入圖片描述

3.2 查詢指定區(qū)間內(nèi)的元素(zrange zrevrange zrangebyscore)

命令基本格式:

ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES] 獲取指定下標(biāo)范圍內(nèi)的元素
ZREVRANGE key start stop [WITHSCORES] 逆序獲取指定下標(biāo)范圍內(nèi)的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 按照分?jǐn)?shù)來找元素,和zcount的效果類似

時間復(fù)雜度:

zrange O(log(N)+M),其中N是排序集合中的元素個數(shù),M是返回的元素個數(shù)。
zrevrange O(log(N)+M),其中N是排序集合中的元素個數(shù),M是返回的元素個數(shù)。
zrangebyscore O(log(N)+M)其中N是排序集合中的元素個數(shù)M是返回的元素個數(shù)。如果M是常數(shù)(例如總是要求前10個元素有LIMIT),你可以認(rèn)為它是O(log(N))。

演示命令的使用:

在這里插入圖片描述

3.3 查詢有序集合中指定成員的排名(zrank zrevrank )

命令基本格式:

ZRANK key member [WITHSCORE] 查詢有序集合中指定成員的排名
ZREVRANK key member [WITHSCORE] 查詢有序集合中指定成員的逆序排名

時間復(fù)雜度:

O(log(N))

演示命令的使用:

在這里插入圖片描述

3.4 查詢有序集合中指定成員的分?jǐn)?shù)(zscore)

命令基本格式:

ZSCORE key member查詢有序集合中指定成員的分?jǐn)?shù)

時間復(fù)雜度:

O(1)

演示命令的使用:

在這里插入圖片描述

四. 刪除元素相關(guān)操作.

4.1 刪除并返回最大/最小的n個元素(zpopmax zpopmin)

命令基本格式:

ZPOPMAX key [count] 刪除并返回最大的n個元素
ZPOPMIN key [count] 刪除并返回最小的n個元素

時間復(fù)雜度:

都是 O(log(N)*M)其中N是排序集合中的元素個數(shù),M是彈出的元素個數(shù)。

演示命令的使用:

在這里插入圖片描述

4.2 帶有阻塞性質(zhì)刪除最大/小元素(bzpopmin bzpopmax)

命令基本格式:

BZPOPMAX key [key ...] timeoutBZPOPMIN key [key ...] timeout

時間復(fù)雜度:

O(log(N)) N是排序集合中元素的個數(shù)O(log(N)) N是排序集合中元素的個數(shù)

演示命令的使用:

在這里插入圖片描述

在這里插入圖片描述

4.3 刪除有序集合中的n個元素( zrem zremrangebyrank zremrangebyscore)

命令基本格式:

ZREM key member [member ...] 刪除有序集合中的n個元素
ZREMRANGEBYRANK key start stop 刪除有序集合中指定排名范圍內(nèi)的成員
ZREMRANGEBYSCORE key min max 刪除有序集合中指定分?jǐn)?shù)范圍內(nèi)的成員

時間復(fù)雜度:

zrem O(M*log(N)),其中N是排序集合中元素的個數(shù),M是要移除的元素的個數(shù)
zremrangebyrank O(log(N)+M),其中N是排序集合中的元素個數(shù),M是操作移除的元素個數(shù)
zremrangebyscore O(log(N)+M),其中N是排序集合中的元素個數(shù),M是操作移除的元素個數(shù)。

演示命令的使用:

在這里插入圖片描述

五. 集合運算相關(guān)操作.

5.1 求有序集合交集的操作(zinterstore)

命令基本格式:

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]

解釋參數(shù)含義:

  • destination 要把求交集的結(jié)果存儲到哪個key對應(yīng)的zset之中.
  • numkeys 描述了后續(xù)有幾個key參與交集運算.
  • weight 每個key對應(yīng)的權(quán)重

時間復(fù)雜度:

O(N*K)+O(M*log(M))最壞情況,其中N是最小的輸入排序集,K是輸入排序集的個數(shù),M是結(jié)果排序集中元素的個數(shù)。

5.2 求集合并集的操作(zunionstore)

命令基本格式:

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]

時間復(fù)雜度:

O(N)+O(M log(M)),其中N是輸入排序集的大小之和,M是結(jié)果排序集的元素個數(shù)。

演示命令的使用:

在這里插入圖片描述

到此這篇關(guān)于Redis中Zset類型常用命令的實現(xiàn)的文章就介紹到這了,更多相關(guān)Redis Zset命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 淺談redis加鎖常用幾種方式

    淺談redis加鎖常用幾種方式

    這篇文章主要介紹了淺談redis加鎖常用幾種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Redis整合SpringBoot的RedisTemplate實現(xiàn)類(實例詳解)

    Redis整合SpringBoot的RedisTemplate實現(xiàn)類(實例詳解)

    這篇文章主要介紹了Redis整合SpringBoot的RedisTemplate實現(xiàn)類,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Redis Sentinel服務(wù)配置流程(詳解)

    Redis Sentinel服務(wù)配置流程(詳解)

    下面小編就為大家?guī)硪黄猂edis Sentinel服務(wù)配置流程(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Redis中Scan命令的基本使用教程

    Redis中Scan命令的基本使用教程

    這篇文章主要給大家介紹了關(guān)于Redis中Scan命令的基本使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Redis+Caffeine多級緩存數(shù)據(jù)一致性解決方案

    Redis+Caffeine多級緩存數(shù)據(jù)一致性解決方案

    兩級緩存Redis+Caffeine可以解決緩存雪等問題也可以提高接口的性能,但是可能會出現(xiàn)緩存一致性問題,如果數(shù)據(jù)頻繁的變更,可能會導(dǎo)致Redis和Caffeine數(shù)據(jù)不一致的問題,所以本文給大家介紹了Redis+Caffeine多級緩存數(shù)據(jù)一致性解決方案,需要的朋友可以參考下
    2024-12-12
  • redis?lua限流算法實現(xiàn)示例

    redis?lua限流算法實現(xiàn)示例

    這篇文章主要為大家介紹了redis?lua限流算法實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Redis 緩存問題及解決

    Redis 緩存問題及解決

    網(wǎng)上收集的一些經(jīng)典特效,這里因為篇幅較長,不加整理了,想運行的代碼的朋友可以點擊textarea中,全選復(fù)制即可。
    2010-07-07
  • Redis安裝配置與常用命令

    Redis安裝配置與常用命令

    Redis 是一款開源的,基于 BSD 許可的,高級鍵值 (key-value) 緩存 (cache) 和存儲 (store) 系統(tǒng)。由于 Redis 的鍵包括 string,hash,list,set,sorted set,bitmap 和 hyperloglog,所以常常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。
    2018-03-03
  • Redis?RESP?協(xié)議實現(xiàn)實例詳解

    Redis?RESP?協(xié)議實現(xiàn)實例詳解

    這篇文章主要為大家介紹了Redis?RESP?協(xié)議實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • redis數(shù)據(jù)一致性的實現(xiàn)示例

    redis數(shù)據(jù)一致性的實現(xiàn)示例

    所謂的redis數(shù)據(jù)一致性即當(dāng)進(jìn)行修改或者保存、刪除之后,redis中的數(shù)據(jù)也應(yīng)該進(jìn)行相應(yīng)變化,本文主要介紹了redis數(shù)據(jù)一致性,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論