文章目錄
集合(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(社交需求)