redis 交集、并集、差集
sinter 、sunion 、sdiff
redis 支持 Set集合的数据存储,其中有三个比较特殊的方法:
sinter key [key …] 返回一个集合的全部成员,该集合是所有给定集合的交集。
sunion key [key …] 返回一个集合的全部成员,该集合是所有给定集合的并集。
sdiff key [key …] 返回所有给定 key 与第一个 key 的差集
sinter 代码示例
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"
sunion 代码示例
redis> SMEMBERS songs 1) "Billie Jean" redis> SMEMBERS my_songs 1) "Believe Me" redis> SUNION songs my_songs # 取的是集合的并集数据据 1) "Billie Jean" 2) "Believe Me"
sdiff 代码示例
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"
sinterstore、sunionstore、sdiffstore
sinterstore destination key [key …] 将 交集 数据存储到某个对象中
sunionstore destination key [key …] 将 并集 数据存储到某个对象中
sdiffstore destination key [key …] 将 差集 数据存储到某个对象中
sinterstore 代码示例
1) "good bye joe" 2) "hello,peter" redis> SMEMBERS my_songs 1) "good bye joe" 2) "falling" redis> SINTERSTORE song_interset songs my_songs # 将交集的数据存储到 song_interset 对象中 (integer) 1 redis> SMEMBERS song_interset # 返回 song_interset 对象中的 所有数据 1) "good bye joe"
sunionstore 代码示例
redis> SMEMBERS NoSQL 1) "MongoDB" 2) "Redis" redis> SMEMBERS SQL 1) "sqlite" 2) "MySQL" redis> SUNIONSTORE db NoSQL SQL # 将并集的数据存储到 db 对象中 (integer) 4 redis> SMEMBERS db # 返回 db 对象中的 所有数据 1) "MySQL" 2) "sqlite" 3) "MongoDB" 4) "Redis"
sdiffstore 代码示例
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 # 将差集的数据存储到 joe_diff_peter 对象中 (integer) 2 redis> SMEMBERS joe_diff_peter # 返回 joe_diff_peter 对象中的 所有数据 1) "hi, lady" 2) "Fast Five"
相信自己的选择,不要犹豫