一、集合类型使用场景
存储一堆不重复值的组合(集合性数据)、提供交集、并集、差集的操作。
如微博关注列表、粉丝列表等。
取某两个都关注的用户列表,只需要取两个用户关注列表的交集即可。
二、集合主要命令
1、增
(1)sadd:添加一个成员或多个成员到集合中
用法:sadd key member [member]
如:
user:1001:fans
表示ID为1001的用户的粉丝列表
127.0.0.1:6379> sadd user:1001:fans 1002 1003
(integer) 2
127.0.0.1:6379> smembers user:1001:fans
1) "1002"
2) "1003"
2、删
(1)srem:删除集合中的某个或某几个成员
用法:srem key member
127.0.0.1:6379> smembers user:1001:fans
1) "1002"
2) "1004"
3) "1005"
127.0.0.1:6379> srem user:1001:fans 1004
(integer) 1
127.0.0.1:6379> smembers user:1001:fans
1) "1002"
2) "1005"
(2)spop:随机删除一个集合成员,并将这个删除的成员返回
127.0.0.1:6379> smembers user:1001:fans
1) "1002"
2) "1005"
3) "1006"
4) "1007"
5) "1008"
127.0.0.1:6379> spop user:1001:fans
"1006"
127.0.0.1:6379> smembers user:1001:fans
1) "1002"
2) "1005"
3) "1007"
4) "1008"
3、改
(1)sdiff:求两个或多个集合的差集
用法:sdiff key1 key2 [key3]
所谓A和B的交集就是A中有但在B中没有的就是A和B的差集,求关注1001但没有关注1002的粉丝
127.0.0.1:6379> smembers user:1001:fans
1) "1002"
2) "1005"
3) "1007"
4) "1008"
127.0.0.1:6379> smembers user:1003:fans
1) "1002"
2) "1006"
3) "1007"
4) "1009"
5) "1010"
127.0.0.1:6379> sdiff user:1001:fans user:1003:fans
1) "1005"
2) "1008"
(2)sdiffstore:求两个或多个集合的差集并将结果保存到一个新的键里
用法:sdiffstore destionation key1 key2 [key3]
如:
127.0.0.1:6379> sdiffstore user:1003:recommend user:1001:fans user:1003:fans
(integer) 2
127.0.0.1:6379> smembers user:1003:recommend
1) "1005"
2) "1008"
(3)sinter:求两个或多个集合的交集
用法:sinter key1 key2 [key3]
如:求1001和1002两个用户共同的粉丝
127.0.0.1:6379> smembers user:1001:fans
1) "1002"
2) "1005"
3) "1007"
4) "1008"
127.0.0.1:6379> smembers user:1003:fans
1) "1002"
2) "1006"
3) "1007"
4) "1009"
5) "1010"
127.0.0.1:6379> sinter user:1001:fans user:1003:fans
1) "1002"
2) "1007"
(4)sinterstore:求两个或多个集合的交集,并将结果保存在一个新的键里。
用法:sinterstore destionation key1 key2 [key3]
如:
127.0.0.1:6379> smembers user:1001:fans
1) "1002"
2) "1005"
3) "1007"
4) "1008"
127.0.0.1:6379> smembers user:1003:fans
1) "1002"
2) "1006"
3) "1007"
4) "1009"
5) "1010"
127.0.0.1:6379> sinterstore user:common:fans user:1001:fans user:1003:fans
(integer) 2
127.0.0.1:6379> smembers user:common:fans
1) "1002"
2) "1007"
(5)sunion:求两个或多个集合的并集
用法:sunion key1 key2 [key3]
如:求两个用户所有的粉丝列表
127.0.0.1:6379> sunion user:1001:fans user:1003:fans
1) "1002"
2) "1005"
3) "1006"
4) "1007"
5) "1008"
6) "1009"
7) "1010"
(6)sunionstore:求两个或多个集合的并集,并把结果保存到一个新的键里。
用法:sunionstore destionation key1 key2 [key3]
如:
127.0.0.1:6379> sunionstore all:fans user:1001:fans user:1003:fans
(integer) 7
127.0.0.1:6379> smembers all:fans
1) "1002"
2) "1005"
3) "1006"
4) "1007"
5) "1008"
6) "1009"
7) "1010"
(7)smove:将一个集合中某个成员移动到另一个集合中
用法:smove source destionation member
如:1001的一个粉丝,对1001取消关注了,然后他又关注了1003
127.0.0.1:6379> smove user:1001:fans user:1003:fans 1005
(integer) 1
127.0.0.1:6379> smembers user:1001:fans
1) "1002"
2) "1007"
3) "1008"
127.0.0.1:6379> smembers user:1003:fans
1) "1002"
2) "1005"
3) "1006"
4) "1007"
5) "1009"
6) "1010"
4、查
(1)smembers:查看集合的所有成员
用法:smembers key
如:查看1001的所有粉丝
127.0.0.1:6379> smembers user:1001:fans
1) "1002"
2) "1007"
3) "1008"
(2)scard:查看集合的成员个数
用法:scard key
如:查看用户1001的粉丝数
127.0.0.1:6379> scard user:1001:fans
(integer) 3
(3)sismember:判断某个成员是否为某个集合的成员
用法:sismember key member
如:判断1005这个用户是否关注过1001(即1005是否为1001的粉丝)
127.0.0.1:6379> sismember user:1001:fans 1005
(integer) 0
127.0.0.1:6379> sismember user:1001:fans 1002
(integer) 1