redis基本数据类型之集合sets操作

一、集合类型使用场景

存储一堆不重复值的组合(集合性数据)、提供交集、并集、差集的操作。

如微博关注列表、粉丝列表等。

取某两个都关注的用户列表,只需要取两个用户关注列表的交集即可。

二、集合主要命令

1、增
(1)sadd:添加一个成员或多个成员到集合中

用法:sadd key member [member]

如:

  1. user:1001:fans

表示ID为1001的用户的粉丝列表

  1. 127.0.0.1:6379> sadd user:1001:fans 1002 1003
  2. (integer) 2
  3. 127.0.0.1:6379> smembers user:1001:fans
  4. 1) "1002"
  5. 2) "1003"
2、删
(1)srem:删除集合中的某个或某几个成员

用法:srem key member

  1. 127.0.0.1:6379> smembers user:1001:fans
  2. 1) "1002"
  3. 2) "1004"
  4. 3) "1005"
  5. 127.0.0.1:6379> srem user:1001:fans 1004
  6. (integer) 1
  7. 127.0.0.1:6379> smembers user:1001:fans
  8. 1) "1002"
  9. 2) "1005"
(2)spop:随机删除一个集合成员,并将这个删除的成员返回
  1. 127.0.0.1:6379> smembers user:1001:fans
  2. 1) "1002"
  3. 2) "1005"
  4. 3) "1006"
  5. 4) "1007"
  6. 5) "1008"
  7. 127.0.0.1:6379> spop user:1001:fans
  8. "1006"
  9. 127.0.0.1:6379> smembers user:1001:fans
  10. 1) "1002"
  11. 2) "1005"
  12. 3) "1007"
  13. 4) "1008"
3、改
(1)sdiff:求两个或多个集合的差集

用法:sdiff key1 key2 [key3]

所谓A和B的交集就是A中有但在B中没有的就是A和B的差集,求关注1001但没有关注1002的粉丝

  1. 127.0.0.1:6379> smembers user:1001:fans
  2. 1) "1002"
  3. 2) "1005"
  4. 3) "1007"
  5. 4) "1008"
  6. 127.0.0.1:6379> smembers user:1003:fans
  7. 1) "1002"
  8. 2) "1006"
  9. 3) "1007"
  10. 4) "1009"
  11. 5) "1010"
  12. 127.0.0.1:6379> sdiff user:1001:fans user:1003:fans
  13. 1) "1005"
  14. 2) "1008"
(2)sdiffstore:求两个或多个集合的差集并将结果保存到一个新的键里

用法:sdiffstore destionation key1 key2 [key3]

如:

  1. 127.0.0.1:6379> sdiffstore user:1003:recommend user:1001:fans user:1003:fans
  2. (integer) 2
  3. 127.0.0.1:6379> smembers user:1003:recommend
  4. 1) "1005"
  5. 2) "1008"
(3)sinter:求两个或多个集合的交集

用法:sinter key1 key2 [key3]

如:求1001和1002两个用户共同的粉丝

  1. 127.0.0.1:6379> smembers user:1001:fans
  2. 1) "1002"
  3. 2) "1005"
  4. 3) "1007"
  5. 4) "1008"
  6. 127.0.0.1:6379> smembers user:1003:fans
  7. 1) "1002"
  8. 2) "1006"
  9. 3) "1007"
  10. 4) "1009"
  11. 5) "1010"
  12. 127.0.0.1:6379> sinter user:1001:fans user:1003:fans
  13. 1) "1002"
  14. 2) "1007"
(4)sinterstore:求两个或多个集合的交集,并将结果保存在一个新的键里。

用法:sinterstore destionation key1 key2 [key3]

如:

  1. 127.0.0.1:6379> smembers user:1001:fans
  2. 1) "1002"
  3. 2) "1005"
  4. 3) "1007"
  5. 4) "1008"
  6. 127.0.0.1:6379> smembers user:1003:fans
  7. 1) "1002"
  8. 2) "1006"
  9. 3) "1007"
  10. 4) "1009"
  11. 5) "1010"
  12. 127.0.0.1:6379> sinterstore user:common:fans user:1001:fans user:1003:fans
  13. (integer) 2
  14. 127.0.0.1:6379> smembers user:common:fans
  15. 1) "1002"
  16. 2) "1007"
(5)sunion:求两个或多个集合的并集

用法:sunion key1 key2 [key3]

如:求两个用户所有的粉丝列表

  1. 127.0.0.1:6379> sunion user:1001:fans user:1003:fans
  2. 1) "1002"
  3. 2) "1005"
  4. 3) "1006"
  5. 4) "1007"
  6. 5) "1008"
  7. 6) "1009"
  8. 7) "1010"
(6)sunionstore:求两个或多个集合的并集,并把结果保存到一个新的键里。

用法:sunionstore destionation key1 key2 [key3]

如:

  1. 127.0.0.1:6379> sunionstore all:fans user:1001:fans user:1003:fans
  2. (integer) 7
  3. 127.0.0.1:6379> smembers all:fans
  4. 1) "1002"
  5. 2) "1005"
  6. 3) "1006"
  7. 4) "1007"
  8. 5) "1008"
  9. 6) "1009"
  10. 7) "1010"
(7)smove:将一个集合中某个成员移动到另一个集合中

用法:smove source destionation member

如:1001的一个粉丝,对1001取消关注了,然后他又关注了1003

  1. 127.0.0.1:6379> smove user:1001:fans user:1003:fans 1005
  2. (integer) 1
  3. 127.0.0.1:6379> smembers user:1001:fans
  4. 1) "1002"
  5. 2) "1007"
  6. 3) "1008"
  7. 127.0.0.1:6379> smembers user:1003:fans
  8. 1) "1002"
  9. 2) "1005"
  10. 3) "1006"
  11. 4) "1007"
  12. 5) "1009"
  13. 6) "1010"
4、查
(1)smembers:查看集合的所有成员

用法:smembers key

如:查看1001的所有粉丝

  1. 127.0.0.1:6379> smembers user:1001:fans
  2. 1) "1002"
  3. 2) "1007"
  4. 3) "1008"
(2)scard:查看集合的成员个数

用法:scard key

如:查看用户1001的粉丝数

  1. 127.0.0.1:6379> scard user:1001:fans
  2. (integer) 3
(3)sismember:判断某个成员是否为某个集合的成员

用法:sismember key member

如:判断1005这个用户是否关注过1001(即1005是否为1001的粉丝)

  1. 127.0.0.1:6379> sismember user:1001:fans 1005
  2. (integer) 0
  3. 127.0.0.1:6379> sismember user:1001:fans 1002
  4. (integer) 1