redis集合中的每個元素都是不同的,且沒有順序,一個集合類型(set)鍵可以至多存儲2^32 -1個字符串。集合類型和列表類型有相似之處,但是也很容易將他們區(qū)分開來,比如他們存儲內(nèi)容都是2^32 -1個字符串,列表類型是有序的而集合類型不是,集合類型的鍵是唯一的而列表類型不是。
集合類型的常用操作是向集合中加入或刪除元素、判斷某個元素是否存在等,由于集合類型在Redis內(nèi)部使用的使散列表(hash table)實現(xiàn)的,所以這些操作的時間復雜度都是O(1)。最方便的使多個集合類型鍵之間還可以進行并集、交集和差集運算。
命令:
1、增加\刪除元素
SADD key member [member ...]
SREM key member [member ...]
SADD命令用來向集合中增加一個或多個元素,如果鍵不存在則會自動創(chuàng)建。因為在一個集合中不能有相同的元素,所以如果要加入的元素已經(jīng)存在于集合中就會忽略這個元素。此命令返回的使成功加入的元素個數(shù)。
SREM命令用來從集合中刪除一個或多個元素,并返回刪除成功的個數(shù)。
2、獲得集合中的所有元素
SMEMBERS key
此命令返回集合中的所有元素。慎用
3、判斷元素是否在集合中
SISMEMBER key member
判斷一個元素是否在集合中是一個時間復雜度為O(1)的操作,無論集合中有多少個元素,SISMEMBER命令始終可以極快的返回結果。當值存在是返回1,值不存在或者鍵不存在時返回0.
4、集合運算
SDIFF key [key ...]
SINTER key [key ...]
SUNION key [key ..]
SDIFF命令用來對多個集合執(zhí)行差集原酸。集合A與B的差集表示A-B,代表所有屬于A且不屬于B的元素構成的集合。此命令支持同事傳入多個鍵,例如A\B\C計算順序是先計算A-B ,在計算之前結果與C的差集。
SINTER命令是用來對多個集合執(zhí)行交集運算,例如集合A與B交集表示屬于A且屬于B的元素構成的集合,同樣的此命令也支持傳入多個鍵,計算同時屬于這些鍵的元素。
SUNION命令用來對多個集合執(zhí)行并集運算,例如集合A與B并集原酸表示屬于A或者屬于B的元素構成的集合。
5、獲得集合中元素個數(shù)
SCARD key 計算集合中元素的個數(shù),返回數(shù)量。
6、進行集合運算并將結果存儲
SDIFFSTORE destination key [key ...]
SINTERSTORE destination key [key ...]
SUNIONSTORE destination key [key ...]
以上三個命令計算方式跟集合的運算一致,唯一的區(qū)別就是不會直接返回結果,而是將結果存儲在destination鍵中。
7、隨機獲得集合中的元素
SRANDMEMBER key [count]
此命令用來隨機從集合中獲取一個或多個元素(count),根據(jù)count的不同(正負),具體表現(xiàn)也不相同:
1)當count為正數(shù)時,SRANDMEMBER會隨機從集合里獲取count個不重復的元素,如果count大于集合中的元素個數(shù)時,則會返回集合中的全部元素。
2)當count為負數(shù)時,SRANDMEMBER會隨機從及合理獲得|count|個元素,這些元素有可能相同。