Redis學習筆記—數據類型:集合(set)


集合(set)類型也是用來保存多個的字符串元素,但和列表類型不一樣的是,集合中不允許有重複元素,並且集合中的元素是無序的,不能通過索引下標獲取元素。

集合內操作

1.添加元素
<pre>sadd key element [element ...]</pre>

添加key爲“myset”的集合,返回的是添加的個數

127.0.0.1:6379> sadd myset a b c
(integer) 3
127.0.0.1:6379> sadd myset a b
(integer) 0
2.獲取所有元素
smembers key

獲取key爲“myset”的集合所有元素

127.0.0.1:6379> smembers myset
1) "c"
2) "a"
3) "b"
3.刪除元素
srem key element [element ...]

刪除key爲“myset”集合的“a”元素

127.0.0.1:6379> srem myset a
(integer) 1
4.計算元素個數
scard key

計算key爲“myset”集合的元素個數

127.0.0.1:6379> scard myset
(integer) 2
5.判斷元素是否在集合中
sismember key element

判斷key爲“myset”集合中元素

127.0.0.1:6379> sismember myset b
(integer) 1
127.0.0.1:6379> sismember myset a
(integer) 0
6.隨機從集合返回指定個數元素
srandmember key count

隨機從key爲“myset”集合返回元素

127.0.0.1:6379> srandmember myset 1
1) "b"
127.0.0.1:6379> srandmember myset 1
1) "b"
127.0.0.1:6379> srandmember myset 1
1) "c"
7.從集合隨機彈出(刪除)元素(可指定個數)
spop key [count]

隨機刪除key爲“myset”集合中的元素

127.0.0.1:6379> smembers myset
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> spop myset 1
1) "b"
127.0.0.1:6379> spop myset
"a"
127.0.0.1:6379> smembers myset
1) "c"

集合間操作

添加測試用數據

127.0.0.1:6379> sadd act:1 My name is Tom
(integer) 4
127.0.0.1:6379> sadd act:2 It is Jerry
(integer) 3
1.求多個集合的交集
sinter key [key...]

求key爲“act:1”和“act:2”的交集

127.0.0.1:6379> sinter act:1 act:2
1) "is"
2.求多個集合的並集
sunion key [key ...]

求key爲“act:1”和“act:2”的交集

127.0.0.1:6379> sunion act:1 act:2
1) "name"
2) "is"
3) "Tom"
4) "Jerry"
5) "My"
6) "It"
3.求多個集合的差集
sdiff key [key ...]

求key爲“act:1”和“act:2”的差集

127.0.0.1:6379> sdiff act:1 act:2
1) "Tom"
2) "My"
3) "name"
4.將交集、並集、差集的結果保存
sinterstore destination key [key ...]
sunionstore destination key [key ...]
sdiffstore destination key [key ...]

保存key爲“act:1”和“act:2”的交集爲key名“act:1_2:inter”

127.0.0.1:6379> sinterstore act:1_2:inter act:1 act:2
(integer) 1
127.0.0.1:6379> smembers act:1_2:inter
1) "is"

內部編碼

  • intset(整數集合):當集合中的元素都是整數且元素個數小於set-max-intset-entries配置(默認512個)時,Redis會選用intset來作爲集合的內部實現,從而減少內存的使用。
  • hashtable(哈希表):當集合類型無法滿足intset的條件時,Redis會使用hashtable作爲集合的內部實現。

使用場景

  • sadd=Tagging(標籤)
  • spop/srandmember=Random item(生成隨機數,比如抽獎)
  • sadd+sinter=Social Graph(社交需求)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章