Set(集合)
redis的set是string類型的無(wú)序集合嚣潜。
set元素最大可以包含(2的32次方-1)個(gè)元素属愤。
關(guān)于set集合類型除了基本的添加刪除操作入桂,其他有用的操作還包含集合的取并集(union)
撮珠,交集(intersection)
伺绽,差集(difference)
刚陡。通過(guò)這些操作可以很容易的實(shí)現(xiàn)sns中的好友推薦功能。
目錄:
1.SADD
2.SCARD
3.SDIFF
4.SDIFFSTORE
5.SINTER
6.SINTERSTORE
7.SISMEMBER
8.SMEMBERS
9.SMOVE
10.SPOP
1.SADD
SADD key member [member ...]
將一個(gè)或多個(gè)member元素加入到集合key當(dāng)中隙轻,已經(jīng)存在于集合的member元素將被忽略绝淡。
假如key不存在丝格,則創(chuàng)建一個(gè)只包含member元素作成員的集合骆撇。
當(dāng)key不是集合類型時(shí)爷怀,返回一個(gè)錯(cuò)誤逗宜。
# 添加單個(gè)元素
redis> SADD bbs "discuz.net"
(integer) 1
# 添加重復(fù)元素
redis> SADD bbs "discuz.net"
(integer) 0
# 添加多個(gè)元素
redis> SADD bbs "tianya.cn" "groups.google.com"
(integer) 2
redis> SMEMBERS bbs
1) "discuz.net"
2) "groups.google.com"
3) "tianya.cn"
2.SCARD
SCARD key
返回集合key的基數(shù)(集合中元素的數(shù)量)智厌。
返回值:
集合的基數(shù)。
當(dāng)key不存在時(shí),返回0栅受。
redis> SADD tool pc printer phone
(integer) 3
redis> SCARD tool # 非空集合
(integer) 3
redis> DEL tool
(integer) 1
redis> SCARD tool # 空集合
(integer) 0
3.SDIFF
SDIFF key [key ...]
返回一個(gè)集合的全部成員棍丐,該集合是所有給定集合之間的差集巾钉。
不存在的key被視為空集。
返回值:
一個(gè)包含差集成員的列表荐捻。
redis> SMEMBERS peter's_movies
1) "bet man"
2) "start war"
3) "2012"
redis> SMEMBERS joe's_movies
1) "hi, lady"
2) "Fast Five"
3) "2012"
redis> SDIFF peter's_movies joe's_movies
1) "bet man"
2) "start war"
SDIFFSTORE destination key [key ...]
這個(gè)命令的作用和 SDIFF 類似斯稳,但它將結(jié)果保存到destination
集合锤岸,而不是簡(jiǎn)單地返回結(jié)果集。
如果destination集合已經(jīng)存在廊酣,則將其覆蓋能耻。
destination可以是key本身赏枚。
返回值:
結(jié)果集中的元素?cái)?shù)量亡驰。
redis> SMEMBERS joe's_movies
1) "hi, lady"
2) "Fast Five"
3) "2012"
redis> SMEMBERS peter's_movies
1) "bet man"
2) "start war"
3) "2012"
redis> SDIFFSTORE joe_diff_peter joe's_movies peter's_movies
(integer) 2
redis> SMEMBERS joe_diff_peter
1) "hi, lady"
2) "Fast Five"
5.SINTER
SINTER key [key ...]
返回一個(gè)集合的全部成員,該集合是所有給定集合的交集饿幅。
不存在的key被視為空集凡辱。
當(dāng)給定集合當(dāng)中有一個(gè)空集時(shí),結(jié)果也為空集(根據(jù)集合運(yùn)算定律)栗恩。
返回值:
交集成員的列表透乾。
redis> SMEMBERS group_1
1) "LI LEI"
2) "TOM"
3) "JACK"
redis> SMEMBERS group_2
1) "HAN MEIMEI"
2) "JACK"
redis> SINTER group_1 group_2
1) "JACK"
SINTERSTORE destination key [key ...]
這個(gè)命令類似于 SINTER 命令,但它將結(jié)果保存到destination集合磕秤,而不是簡(jiǎn)單地返回結(jié)果集乳乌。
如果destination集合已經(jīng)存在,則將其覆蓋市咆。
destination可以是key本身汉操。
返回值:
結(jié)果集中的成員數(shù)量。
redis> SMEMBERS songs
1) "good bye joe"
2) "hello,peter"
redis> SMEMBERS my_songs
1) "good bye joe"
2) "falling"
redis> SINTERSTORE song_interset songs my_songs
(integer) 1
redis> SMEMBERS song_interset
1) "good bye joe"
SISMEMBER key member
判斷member元素是否集合key的成員蒙兰。
返回值:
如果member元素是集合的成員磷瘤,返回1。
如果member元素不是集合的成員搜变,或key不存在采缚,返回0。
redis> SMEMBERS joe's_movies
1) "hi, lady"
2) "Fast Five"
3) "2012"
redis> SISMEMBER joe's_movies "bet man"
(integer) 0
redis> SISMEMBER joe's_movies "Fast Five"
(integer) 1
8.SMEMBERS
SMEMBERS key
返回集合key中的所有成員挠他。
不存在的key被視為空集合扳抽。
返回值:
集合中的所有成員。
# key不存在或集合為空
redis> EXISTS not_exists_key
(integer) 0
redis> SMEMBERS not_exists_key
(empty list or set)
# 非空集合
redis> SADD language Ruby Python Clojure
(integer) 3
redis> SMEMBERS language
1) "Python"
2) "Ruby"
3) "Clojure"
9.SMOVE
SMOVE source destination member
將member元素從source集合移動(dòng)到destination集合殖侵。
SMOVE 是原子性操作摔蓝。
如果source集合不存在或不包含指定的member元素,則 SMOVE 命令不執(zhí)行任何操作愉耙,僅返回0贮尉。否則,member元素從source集合中被移除朴沿,并添加到destination集合中去猜谚。
當(dāng)destination集合已經(jīng)包含member
元素時(shí)败砂, SMOVE 命令只是簡(jiǎn)單地將source
集合中的member元素刪除。
當(dāng)source或destination不是集合類型時(shí)魏铅,返回一個(gè)錯(cuò)誤昌犹。
返回值:
如果member元素被成功移除,返回1览芳。
如果member元素不是source集合的成員斜姥,并且沒(méi)有任何操作對(duì)destination
集合執(zhí)行,那么返回0沧竟。
redis> SMEMBERS songs
1) "Billie Jean"
2) "Believe Me"
redis> SMEMBERS my_songs
(empty list or set)
redis> SMOVE songs my_songs "Believe Me"
(integer) 1
redis> SMEMBERS songs
1) "Billie Jean"
redis> SMEMBERS my_songs
1) "Believe Me"
10.SPOP
SPOP key
移除并返回集合中的一個(gè)隨機(jī)元素铸敏。如果只想獲取一個(gè)隨機(jī)元素,但不想該元素從集合中被移除的話悟泵,可以使用 SRANDMEMBER 命令杈笔。
返回值:
被移除的隨機(jī)元素。
當(dāng)key不存在或key是空集時(shí)糕非,返回nil蒙具。
redis> SMEMBERS db
1) "MySQL"
2) "MongoDB"
3) "Redis"
redis> SPOP db
"Redis"
redis> SMEMBERS db
1) "MySQL"
2) "MongoDB"
redis> SPOP db
"MySQL"
redis> SMEMBERS db
1) "MongoDB"