Redis常見數據類型(6)-set, zset

目錄

Set

命令小結

內部編碼

使用場景

用戶畫像

其它

Zset有序集合

普通指令

zadd

zcard

zcount

zrange

zrevrange

?編輯?

?zrangebyscore

zpopmax/zpopmin

bzpopmax/bzpopmin

zrank/zrevrank

zscore

zrem

?zremrangebyrank

zremrangebyscore


Set

命令小結

命令功能時間復雜度
sadd key element [element...]向集合添加元素O(k), k是元素個數
srem key element [element...]刪除集合中的元素O(k), k是元素個數
scard key求集合中的元素數目O(1)
sismember key element判斷一個元素是否在集合內O(1)
srandmember key [count]在集合中隨機獲取count個元素O(count)
spop key [count]在集合中隨機刪除count個元素O(count)
smembers key獲取集合中的所有元素O(k), k是元素個數
sinter key [key...] sinterstore求多個集合的交集O(m * k)
sunion key [key...] sunionstore求多個集合的并集O(k), k是多個集合元素個數的總和
sdiff key [key...] sdiffstore求多個集合的差集O(k), k是多個集合元素個數的總和

內部編碼

集合中的內部編碼有兩種:?

intset(整數集合): 當集合中的元素都是整數并且元素的個數小于set-max-intset-entires配置時, Redis會選用intset來作為集合的內部實現, 從而減少內存的使用.?

hashtable(哈希表): 當集合類型無法滿足intset的條件時, Redis會使用hashtable作為集合的內部實現.?

?

使用場景

用戶畫像

集合類型比較典型的使用場景就是用戶畫像, 例如在抖音中, 用戶A對美女跳舞, 唱跳rap籃球感興趣, 用戶B對歷史, 二次元游戲感興趣, 那么這些特征就會被記錄為用戶畫像, 這些數據對提升用戶體驗和用戶黏度就非常有幫助.

其它

在社交軟件中查找共同好友. 以及互聯網產品中衡量用戶量, 用戶規模非常有幫助(主要是按照瀏覽量等指標來確定, 如果同一個用戶多次訪問, 就會去重訪問信息, 這樣有助于準確地提供用戶規模等信息).?

Zset有序集合

簡而言之, 它還是一種集合, 但是與集合不同, 它在里面引入了一個浮點類型 -- 分數(score)這個概念, 我們可以通過這個分數作為排序依據, 使其有序(之前如list中是使用下標的概念).??

比如我們按照傷害對如下植物進行排序:

有序集合提供了指定分數和元素的范圍查找, 計算成員排名等功能, 合理利用有序集合, 能解決很多問題.

普通指令

zadd

功能: 添加或者更新指定的元素以及關聯的分數到zset中, 分數應該符合double類型.?

語法:?

zadd key [nx | xx] [gt | lt] [ch] [incr] score member [score member...] (注: 分數可重復)

相關選項介紹:?

xx|nx: xx僅僅用于更新存在的元素, 不添加新元素; nx可以更新未存在的元素(不寫默認為nx)

gt | lt : 如果要更新分數, 發現比現在給定的分數大(小), 此時就更新成功, 否則不更新.

ch: 默認情況下, zadd返回的是本次添加的元素個數, 但指定這個選項之后, 就會還包含本次更新的元素個數.

incr: 此時命令類似zincrby 的效果, 將元素分數加上指定的分數, 此時只能指定一個元素/分數.?

時間復雜度: O(logN): 因為要找到插入元素的位置, 就會使用類似二分查找這種方式尋找.

返回值:? 本次添加的元素個數.

?

其余參數可以自行測試.

zcard

功能: 獲取zset中的元素數目.?

語法:

zcard key

返回值: zset中的元素個數.?

zcount

功能: 返回分數在min和max之間的元素個數, 默認情況下, min和max都是包含的, 可以通過 ( 排除.即一般情況下為閉區間, 使用(的那個數字的那個部分是開區間.

語法:

zcount key min max

時間復雜度: O(logN), 因為實際上在Zset內能夠得知元素的位次, 因此我們只需要定位到min和max的位次, 然后相減即可.?

返回值: 滿足條件的元素列表個數?

?

zrange

功能: 返回指定區間里的元素, 分數按照升序排序. 帶上withscores可以把分數也返回.

語法:

?zrange key start stop [withscores]

此處的[start, stop]為下標構成的區間,? 從0開始, 支持負數.

時間復雜度: O(logN + M), 先找到start/ stop, 然后M是指start與stop之間的元素數目.

返回值: 區間里的元素列表.

zrevrange

功能: 返回指定區間里的元素, 分數按降序排序, 帶上withscores也可以將分數返回.

語法:

zrevrange key start stop [withscores]

時間復雜度: O(logN + M)

返回值: 區間元素列表.

?

?zrangebyscore

返回分數在min, max之間的元素, 默認情況下, min和max都是包含的, 可以通過 ( 排除.

語法:

zrangebyscore key min max

時間復雜度: O(logN + M)

返回值: 區間的元素列表?

zpopmax/zpopmin

刪除并返回分數最高/低的count個元素.?

語法:

zpopmax/zpopmin?key [count]

時間復雜度: O(logN * M) N是有序集合數目, M是要刪除數目, 雖然我們記錄了次序, 但我們是通過M次普通刪除(每次刪一個), 因此時間復雜度是這個.

返回值: 分數和元素列表.

bzpopmax/bzpopmin

功能: zpopmax/zpopmin阻塞版本.

語法:

bzpopmax/bzpopmin?key [key...] timeout?

時間復雜度: O(N)

zrank/zrevrank

功能: 返回指定元素的排名, 升序/降序.?

語法:

zrank/zrevrank?key member

時間復雜度: O(logN)

返回值, 排名.?

?

zscore

?功能: 返回指定元素的分數.

語法:

zscore key member

時間復雜度: O(1)?

返回值: 分數

zrem

功能: 刪除指定元素.

語法:

zrem key member [member...]?

時間復雜度: O(M * logN)

返回值: 本次操作刪除的元素個數.

?zremrangebyrank

功能: 按照排序, 升序刪除指定范圍的元素, 左閉右閉.

語法:

zremrangebyrank key start stop

時間復雜度: O(logN + M)

返回值: 本次操作的元素個數.

zremrangebyscore

功能: 按照分數刪除指定范圍的元素, 左閉右閉.

語法

zremrangebyscore key min max

時間復雜度: O(logN + M)

返回值: 本次操作刪除的元素數目.?

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

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

相關文章

鏈棧的存儲

單向鏈表在棧中的存儲 typedef struct StackNode {SElemType data;struct StackNode* next; }StackNode, *LinkStack; LinkStack S; //鏈棧初始化 void InitStack(LinkStack& S) {S NULL;return OK; } //判斷鏈棧是否為空 Status StackEmpty(LinkStack S) {if (S NU…

將具有傳統IP的設計遷移到Vivado設計套件

將具有傳統IP的設計遷移到Vivado設計套件 概述 AMD Vivado?設計套件允許您從CORE Generator?工具遷移IP設計。你可以 還可以將IP遷移到Vivado Design Suite的最新版本。 重要!Vivado集成開發環境(IDE)要求IP、實例化和 端口名都是小寫的。將…

Spring 模擬管理Web應用程序

MVC:Model View Controller 1)controller:控制層(Servlet是運行服務器端,處理請求響應java語言編寫技術) 2)service:業務層(事務,異常) 3&#xf…

視頻號小店的保證金是多少錢?2024最新收費標準,一篇了解!

哈嘍~我是電商月月 現實社會,干什么都需要交錢,就連上班,路費也得掏錢 想要入駐視頻號小店,在視頻號里賣貨賺錢,就要繳納類目保證金 那到底要繳多少錢呢? 今天,月月就把最新的收費標準分享給…

輕松拿捏C語言——【字符串函數】的使用及模擬實現

🥰歡迎關注 輕松拿捏C語言系列,來和 小哇 一起進步!? 🎉創作不易,請多多支持🎉 🌈感謝大家的閱讀、點贊、收藏和關注💕 🌹如有問題,歡迎指正 感謝 目錄 一、…

mysql 拼接兩個字段的值 使用CONCAT的函數

CONCAT()函數拼接兩個不用字段的值,最后在一個字段里面顯示出來,具體實例如下: 下面這個案例就行把SSSHENGBH、SSSBH、SSXBH、SSXZBH字段值拼接到一個字段里面進行顯示 select CONCAT(SSSHENGBH,SSSBH,SSXBH,SSXZBH) FROM BLT_JBXXJLB

3D 生成重建013-ProlificDreamer將SDS拓展到VSD算法進行高質量的3D生成

3D 生成重建013-ProlificDreamer將SDS拓展到VSD算法進行高質量的3D生成 文章目錄 0論文工作1論文方法2效果 0論文工作 **分數蒸餾采樣(SDS)**通過提取預先訓練好的大規模文本到圖像擴散模型,在文本到3d生成方面顯示出了巨大的前景&#xff0…

Windows VS2022 C語言使用 sqlite3.dll 訪問 SQLite數據庫

今天接到一個學生C語言訪問SQLite數據庫的的需求: 第一步,SQLite Download Page下載 sqlite3.dll 庫 下載解壓,發現只有兩個文件: 于是使用x64 Native Tools Command Prompt 終端 生成 sqlite3.lib 和 sqlite3.exp文件 LIB -def:sqlite3.def -out:sqlite3.lib -machin…

廣告圈策劃大師課:活動策劃到品牌企劃的深度解析

對于剛接觸營銷策劃的新人來說,在這個知識密集型行業里生存,要學習非常多各種意思相近的概念,常常讓人感到頭疼,難以區分。 這里對這些策劃概念進行深入解析,幫助您輕松理清各自的含義和區別。 1. 活動策劃&#xff…

C++ 字符串處理-將字符串轉成大寫或小寫

1. 關鍵詞2. strutil.h3. strutil.cpp4. 測試代碼5. 運行結果6. 源碼地址 1. 關鍵詞 C 字符串處理 將字符串轉成大寫或小寫 跨平臺 2. strutil.h #include <string> namespace cutl {/*** brief Convert a string to upper case.** param str the string to be conve…

微信小程序自定義頭部

1.在對應界面的json文件&#xff0c;將navigationStyle屬性設置為“custom” "navigationStyle":"custom" 2. 狀態欄的高度可以通過 wx.getSystemInfo() 獲取。 膠囊按鈕的信息可以通過 wx.getMenuButtonBoundingClientRect() 獲取。 導航欄高度狀態欄…

截圖工具PixPin(比Snipaste更強大)

PixPin官網鏈接&#xff1a;https://pixpinapp.com/ 最近新出的一款截圖工具PixPin&#xff0c;比Snipaste功能多一些。在Snipaste功能基礎上&#xff0c;還支持長截圖&#xff0c;截動圖&#xff0c;文本識別。

C++11-獨占指針unique_ptr原理實現

獨占指針&#xff08;unique_ptr&#xff09;是C11標準引入的一種智能指針&#xff0c;用于獨占管理動態分配對象的生命周期。unique_ptr確保對象在同一時間只有一個所有者&#xff0c;防止對象被多個指針共享。下面是unique_ptr的實現原理及其內存管理機制。 unique_ptr 的基…

618好物推薦,省心省力省錢包!

一年一度的“618”購物狂歡節又來啦&#xff01;大家都心動了吧&#xff0c;購物車也早就堆滿了心儀的好物。別急&#xff0c;別急&#xff0c;讓我給你們推薦幾款真正值得入手的寶貝&#xff0c;讓你們省心、省力還省錢包&#xff01;不管是給自己添置點新裝備&#xff0c;還是…

Vue實現一個動態添加行的表格?

在Vue中實現一個動態添加行的表格可以通過以下步驟來完成&#xff0c;如下所示。 步驟 1&#xff1a;設置表格的數據模型 在Vue組件中定義表格的數據模型&#xff0c;通常使用一個數組來存儲表格的數據。每一行數據可以是一個對象&#xff0c;對象的屬性對應表格的列。 data(…

MFC 編程:Windows 桌面應用程序開發框架

目錄 一.概述 二.MFC 與 Win32 的關系 三.CObject 類 1.CObject 類的主要功能 2.CObject 類的派生類 3.CObject 類成員函數 4.內存管理 對象的創建 對象的銷毀 引用計數 復制對象 5.序列化 序列化的概念 CObject 類的序列化功能 序列化示例 6.運行時類型信息 …

uniapp App去除iOS底部安全區域白邊

未設置的情況下&#xff0c;iOS底部安全區域白邊 如圖&#xff1a; 去除方法&#xff1a; 在 mainfest.json 中加入一下代碼&#xff1a; "safearea" : {"bottom" : {"offset" : "none"} }, 去除效果展示&#xff1a;

Git使用筆記

Git使用筆記 介紹Git推送指定的提交 介紹 Git推送指定的提交 在Git中&#xff0c;如果只想推送一個特定的提交&#xff08;commit&#xff09;&#xff0c;而不是整個分支&#xff0c;可以使用以下步驟&#xff1a; 首先&#xff0c;找到你想要推送的提交的哈希值。通過運行g…

開放式耳機2024超值推薦!教你如何選擇藍牙耳機!

開放式耳機的便利性讓它在我們的日常生活中變得越來越重要。它讓我們擺脫了傳統耳機的限制&#xff0c;享受到了更多的自由。不過&#xff0c;市面上的開放式耳機種類繁多&#xff0c;挑選一款既實用又實惠的產品確實需要一些小竅門。作為一位對開放式耳機頗有研究的用戶&#…