Redis 資料結構 集合(set)(五)

2021-08-21 03:00:53 字數 1556 閱讀 5692

集合(set) 型別也是用來儲存多個的字串元素,但和列表型別不一樣的是,集合中不允許有重複的元素。(ps,如果重複了,乙個集合下如何區分那個元素是那個元素呢?);並且集合中的元素是無序的,不能通過索引下標獲取元素。乙個集合最多可以儲存2^32 -1 個元素。redis除了支援集合的增刪改查,同時還支援多個集合取交集,並集,差集。

1、新增元素,返回新增成功的個數

sadd  key  element  [element ...]

2、刪除元素

srem key  element [element ...]

3、計算元素個數

scard  key 

4、 判斷元素是否在集合中

sismember key element

5、隨機從集合返回指定個數元素 ,count 如果不寫,預設為1

srandmember  key [count]

6、從集合隨機彈出元素

spop key [count]

注:srandmember和spop都是從集合隨機選出元素,不同的是,spop執行後會從集合中刪除該元素。而srandmember不會刪除該元素。

7、獲取所有元素,返回結果無序

smembers key

求多個集合交集

sinter key [key ...]

求多個集合並集

sunion key [key ...]

求多個集合差集

sdiff  key  [key  ...]

將差集、並集、交集的結果儲存

sdiffstore  destination key [key ...]

sunionstore destination key [key ...]

sinterstore destination key [key ...]

集合間的運算元素較多的情況下會比較耗時,所以redis提供了上面三個命令(原命令+store)將集合間的交集、並集、差集的結果儲存在destination 中,後面的key表示需要求交、並、差集的集合。

127.0.0.1:6379> sinterstore targerkey coll2 coll3

(integer) 25

集合型別的內部編碼有兩種

intset(整數集合)   當集合中的元素都是整數且元素個數小於st-max-intet-entries配置(預設512個),redis會選用intset來作為集合的內部實現,二減少記憶體的使用

hashtable(雜湊表)  當集合型別無法滿足intset的條件時,redis會使用hashtable作為集合的內部實現。

集合型別比較典型的使用場景就是標籤(tag),如乙個使用者可能對娛樂,體育比較感興趣,另乙個使用者對歷史,新聞比較感興趣,這些興趣點就是標籤。

注:使用者和標籤的關係維護應該在乙個事務內執行,防止部分命令失敗造成資料不一致。

常用場景組合:

sadd  =tagging(標籤)

spop/srandmember  =random  item (生成隨機數,如**)

sadd  + sinter   = social   graph (社交,求共同興趣愛好等)

集合 C 資料結構 集合 set

工作也不想做,部落格也不想寫qaq又是乙個難熬的下午 這個月的leetcode每日一題落下了好多,主要是動態規劃我真不會,看題解基本也想不明白,dp我的一生之敵 x x 這裡要介紹一下順序容器和關聯容器的區別。順序容器就是按照元素在容器中的位置,來進行儲存和訪問,例如vector deque lis...

redis 原理 資料結構 整數集合 五

集合鍵的底層 intset 實現之一,當乙個集合只包含數值,並且數值的元素並不多時,就會選擇使用整數集合作為底層實現,本地 0 sadd number 1 2 5 6 4本地 0 object encoding number intset 注 雖然contens型別為int 8但是真正儲存的儲存的型...

資料結構之集合Set

1 高層的資料結構,集合set和對映map,什麼是高層的資料結構呢,比如說是棧和佇列,這種資料結構更像是先定義好了使用介面,有了這些使用介面,包括資料結構本身所維持的一些性質,可以很方便的放入到一些應用中,但是底層實現可以多種多樣的,比如棧和佇列,底層實現既可以是動態資料,也可以是鍊錶。集合就是承載...