Redis系列 6 集合(Set)結構

2021-08-08 16:47:56 字數 2350 閱讀 6218

集合間的操作

內部編碼

適合場景

redsi裡的集合叫set,和其他語言有一些不同。在資料結構上,集合裡的資料原則上是沒有先後的。就像去超市買了一大袋東西,袋子就是乙個集合,裡面的東西也沒什麼必然的聯絡吧?

下面所有描述裡 {}都是必需引數,<>是可選引數

設定值

sadd 

可以新新增乙個集合並一次新增多個元素,向舊有的集合裡新增資料也是用這個

獲取值

smembers
刪除元素

srem 

[element....]

此命令會先判斷元素是不是在集合中,是的話會刪除。結果是返回刪除的個數。。如果不在集合中會返回0。。也就是說,返回0此命令沒什麼產生什麼效果。

計算元素個數

scard
和前面講到的一樣,此命令不會去遍歷,會直接取內部值。時間複雜度是o(1);

判斷元素是否在集合中

sismember 

從集合中隨機彈出元素
spop 

//count引數從redis3.2版本起才支援,windows版最新版也支援了

這個彈出命令是集合中用的比較多的命令,注意是隨機的!至於真隨機還是偽隨機,個人推測這裡是用偽隨機達到了真隨機的效果。redis是單執行緒程式,也就是說單位時間內只會有一條命令在執行,偽隨機裡有時間來做種子,既然時間不一樣了,那就不可能產生兩個相同的隨機數,所以也就是真隨機了。

命令執行後,會返回從集合中彈出的資料。

從redis 3.2版起,此命令也支援count引數了,但是要注意的是:此命令會刪除資料

隨機從集合中返回指定個數元素

srandmember 

隨機的和上面一樣的推測,結果也是返回多個。

和上面命令不用的是:此命令不會刪除資料

這些集合間的操作和數學中的集合一樣的。。差集 並集 交集等等

求多個集合的交集

sinter  [key...]
此命令會返回兩個集合中,有相同元素的(值相同就行)。如果有2個集合以上來求交集,那就會多個集合的元素值都有一樣的才會有結果,否則就不行。

求多個集合的並集

suinon  [key...]
命令也是一樣,返回結果。。並集什麼意思就不用講了唄

求多個集合的差集

sdiff  [key...]
命令也是一樣,返回結果。。差集什麼意思就不用講了唄。在最上面那個圖有解釋。

將集合操作儲存

sinterstore 

[key....]//儲存交集

suionstore

[key....]//儲存並集

sdiffstore

[key....]//儲存差集

把第二個引數key和後面的key的交\並\差集結果儲存在targetkey這個引數的集合裡

集合操作在元素比較多的情況下是比較費時的,redis也提供了儲存結果的命令。這裡就是把結果儲存在第乙個集合裡。

這個在設計時就要考慮要不要儲存結果。。雖然說儲存下來做快取是好的,但是也增加了複雜性。在設計時就要權衡這些,往往在增強乙個點時,另一些地方可能就會顯露出不足。在業務不複雜的、查詢量大時,可以儲存下來結果,增加的複雜性不大,但效果卻好。如果業務比較多或是複雜了,效能上有要求時,這會就要具體分析了。。因為儲存結果的這個集合,也是需要管理的啊。。

有兩種:

intset:整數集合,當集合全是整數而且元素個數小於配置set-max-intset-entries的時候,會使用這個型別

hashtable:雜湊表,當集合不滿足inset條件時,使用這個型別

1.標籤

標籤是不用分順序的,所以集合適合這類場景。比如使用者的興趣愛好、熱點分類等。。建議:給使用者新增標籤可以同時按標籤新增使用者,並放在乙個事務內執行。。這樣就可以很簡單的實現部落格中的功能(文章按標籤分類了,同時點標籤也會檢視所有有這個標籤文章)。熱點排行可以用後面的有序集合

2.**

集合中有隨機彈出和隨機獲取功能,可以用來完成**功能。調整權重時也可以控制集合裡重複的元素來控制權重,當然也可以用後面的有序集合。

Redis學習(七) 集合型別(Set)

集合中的每個元素都是不同的,且沒有順序。集合在redis內部是使用值為空的雜湊表實現的。所以向集合中加入 刪除元素 判斷某個元素是否存在的時間複雜度都是o 1 多個集合之間還可以進行交集 並集和差集運算。1.多條件查詢 1.增加 刪除元素 sadd key member member 返回成功加入的...

5 03 集合框架 set集合

一 set集合概述 乙個不包含重複元素的 collection。更確切地講,set 不包含滿足e1.equals e2 的元素對e1和e2,並且最多包含乙個 null 元素。正如其名稱所暗示的,此介面模仿了數學上的 set 抽象。在所有構造方法以及 add equals 和 hashcode 方法的...

Redis教程 五 集合(SET)型別

redis教程 五 集合 set 型別 redis 的鍵值可以支援資料型別 字串,列表,散表,集合,有序集合 hyperloglog 通過選用不同的資料結構,使用者可以使用 redis 解決各式各樣的問題。set集合 redis 的集合以無序的方式儲存多個各不相同的元素。使用者可以快速的地向集合新增...