數據類型為set。可以保證set內數據唯一。場景:生成訂單號,因為要求訂單號是絕對不能重覆的,所以資料庫中要設置為unique索引。但是其實可以通過redis,set來做每天的訂單集合。比如A客戶的訂單號201803041,B客戶併發了相同的訂單號,但是A客戶插入了set集合,B客戶插入就會返回0, ...
數據類型為set。可以保證set內數據唯一。場景:生成訂單號,因為要求訂單號是絕對不能重覆的,所以資料庫中要設置為unique索引。但是其實可以通過redis,set來做每天的訂單集合。比如A客戶的訂單號201803041,B客戶併發了相同的訂單號,但是A客戶插入了set集合,B客戶插入就會返回0,表示重覆,需要再次生成,一定程度上減少了資料庫unique的驗證。
#添加到set集合中
SADD key member [member ...]
添加一個或多個指定的member元素到集合的 key中.指定的一個或者多個元素member 如果已經在集合key中存在則忽略.如果集合key 不存在,則新建集合key,並添加member元素到集合key中.
如果key 的類型不是集合則返回錯誤.
127.0.0.1:6379> SADD set 1 2 3 3 4 4 (integer) 4 127.0.0.1:6379> SMEMBERS set 1) "1" 2) "2" 3) "3" 4) "4"
#如果想知道set集合的大小可以使用命令scard
SCARD key
127.0.0.1:6379> SCARD set (integer) 4
#如果想比較集合。命令有sdiff,sdiffstore,sinter,sinterstore,sunion,sunionstore
SDIFF key [key ...]
返回一個集合與給定集合的差集的元素.
127.0.0.1:6379> SADD set1 a (integer) 1 127.0.0.1:6379> SADD set2 a (integer) 1 #兩個相同的集合或者都是空集合比較 127.0.0.1:6379> SDIFF set1 set2 (empty list or set) #有差值的情況 127.0.0.1:6379> SADD set1 b (integer) 1 127.0.0.1:6379> SDIFF set1 set2 1) "b"
SDIFFSTORE destination key [key ...]
該命令類似於 SDIFF, 不同之處在於該命令不返回結果集,而是將結果存放在destination
集合中.
如果destination
已經存在, 則將其覆蓋重寫.可以理解為將比較差集後的結果保存到新的目標集合
127.0.0.1:6379> SDIFF set1 set2 1) "b" 127.0.0.1:6379> SDIFFSTORE set3 set1 set2 (integer) 1 127.0.0.1:6379> SMEMBERS set3 1) "b"
SINTER key [key ...]
返回指定所有的集合的成員的交集.官方實例解釋
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SINTER key1 key2 key3 = {c}
127.0.0.1:6379> SINTER set1 set2 1) "a"
SINTERSTORE destination key [key ...]
和sdiffstore效果類似。將交集寫到新的集合。如果集合存在則覆蓋重寫。
SUNION key [key ...]
返回給定的多個集合的並集中的所有成員.
例如:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SUNION key1 key2 key3 = {a,b,c,d,e}
#如果需要判斷值是否在集合中可以使用命令:sismember
SISMEMBER key member
返回成員 member 是否是存儲的集合 key的成員.
##返回值
- 如果member元素是集合key的成員,則返回1
- 如果member元素不是key的成員,或者集合key不存在,則返回0
#返回key集合所有的元素.在上面實例中已經使用。
SMEMBERS key
返回key集合所有的元素.
該命令的作用與使用一個參數的SINTER 命令作用相同.
SMOVE source destination member
將member從source集合移動到destination集合中. 對於其他的客戶端,在特定的時間元素將會作為source或者destination集合的成員出現.
如果source 集合不存在或者不包含指定的元素,這smove命令不執行任何操作並且返回0.否則對象將會從source集合中移除,並添加到destination集合中去,如果destination集合已經存在該元素,則smove命令僅將該元素充source集合中移除. 如果source 和destination不是集合類型,則返回錯誤.
127.0.0.1:6379> SADD test4 1 2 (integer) 2 127.0.0.1:6379> SADD test5 3 (integer) 1 127.0.0.1:6379> SMOVE test4 test5 2 (integer) 1 127.0.0.1:6379> SMEMBERS test4 1) "1" 127.0.0.1:6379> SMEMBERS test5 1) "2" 2) "3"
#如果你想彈出集合中的值可以使用spop。
SPOP key [count]
是隨機位置彈出set中的值。count計數與redis版本有關
127.0.0.1:6379> SADD test6 1 2 3 4 6 5 7 8 9 10 (integer) 10 127.0.0.1:6379> SPOP test6 3 1) "1" 2) "5" 3) "10" 127.0.0.1:6379> SMEMBERS test6 1) "2" 2) "3" 3) "4" 4) "6" 5) "7" 6) "8" 7) "9"
#隨機返回set中指定個數的值
SRANDMEMBER key [count]
僅提供key參數,那麼隨機返回key集合中的一個元素.
Redis 2.6開始, 可以接受 count 參數,如果count是整數且小於元素的個數,返回含有 count 個不同的元素的數組,如果count是個整數且大於集合中元素的個數時,僅返回整個集合的所有元素,當count是負數,則會返回一個包含count的絕對值的個數元素的數組,如果count的絕對值大於元素的個數,則返回的結果集里會出現一個元素出現多次的情況.
僅提供key參數時,該命令作用類似於SPOP命令, 不同的是SPOP命令會將被選擇的隨機元素從集合中移除, 而SRANDMEMBER僅僅是返回該隨記元素,而不做任何操作.
127.0.0.1:6379> SADD set7 1 2 3 4 5 (integer) 5 127.0.0.1:6379> SRANDMEMBER set7 "4" 127.0.0.1:6379> SRANDMEMBER set7 3 1) "1" 2) "2" 3) "4" 127.0.0.1:6379> SRANDMEMBER set7 10 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 127.0.0.1:6379> SRANDMEMBER set7 -10 1) "4" 2) "2" 3) "1" 4) "2" 5) "5" 6) "4" 7) "1" 8) "3" 9) "3" 10) "1"
#移除集合中某個值
SREM key member [member ...]
在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素則忽略 如果key集合不存在則被視為一個空的集合,該命令返回0.
如果key的類型不是一個集合,則返回錯誤.
127.0.0.1:6379> SMEMBERS set7 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 127.0.0.1:6379> SREM set7 2 (integer) 1 127.0.0.1:6379> SMEMBERS set7 1) "1" 2) "3" 3) "4" 4) "5"