1.2. Set類型
1.2.1. 簡介
-
Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重複的數據。
-
Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的複雜度都是 O(1)。
-
集合中最大的成員數爲 2次方32 - 1 (4294967295, 每個集合可存儲40多億個成員)。
類似於JAVA中的 Hashtable集合 -
redis的集合對象set的底層存儲結構特別神奇,底層使用了intset和hashtable兩種數據結構存儲的,intset我們可以理解爲數組,hashtable就是普通的哈希表(key爲set的值,value爲null)。
-
intset內部其實是一個數組(int8_t coentents[]數組),而且存儲數據的時候是有序的,因爲在查找數據的時候是通過二分查找來實現的。
1.2.2. 命令
賦值語法:
- SADD key member1 [member2] 向集合添加一個或多個成員
取值語法:
- SCARD key 獲取集合的成員數
- SMEMBERS key 返回集合中的所有成員
- SISMEMBER key member 判斷 member 元素是否是集合 key 的成員(開發中:驗證是否存在判斷)
- SRANDMEMBER key [count] 返回集合中一個或多個隨機數
刪除語法:
- SREM key member1 [member2] 移除集合中一個或多個成員
- SPOP key [count] 移除並返回集合中的一個隨機元素
- SMOVE source destination member 將 member 元素從 source 集合移動到 destination 集合
差集語法:
- SDIFF key1 [key2] 返回給定所有集合的差集(左側) ,獲取集合中的差集(在集合1中存在,不在集合2中存在的元素)
- SDIFFSTORE destination key1 [key2] 返回給定所有集合的差集並存儲在 destination 中
交集語法:
- SINTER key1 [key2] 返回給定所有集合的交集(共有數據) ,獲取交集(在兩個集合中都存在的元素)
- SINTERSTORE destination key1 [key2] 返回給定所有集合的交集並存儲在 destination 中
並集語法:
- SUNION key1 [key2] 返回所有給定集合的並集 ,求並集(兩個集合合併後,去掉重複的元素)
- SUNIONSTORE destination key1 [key2] 所有給定集合的並集存儲在 destination 集合中
1.2.3. 應用場景
常應用於:對兩個集合間的數據[計算]進行交集、並集、差集運算
- 以非常方便的實現如共同關注、共同喜好、二度好友等功能。對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存儲到一個新的集合中。
- 利用唯一性,可以統計訪問網站的所有獨立 IP