Redis 之set的使用

240 阅读2分钟

SET

无序不重复集合

增删查移

标题
sadd将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。假如 key 不存在,则创建一个只包含 member 元素作成员的集合。当 key 不是集合类型时,返回一个错误。
smembers返回集合 key 中的所有成员。不存在的 key 被视为空集合。
sismember判断 member 元素是否集合 key 的成员。返回值:1存在,0不存在
scard返回集合 key 的基数(集合中元素的数量)。
srandmember如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。详情
spop移除并返回集合中的一个随机元素。
smove将 member 元素从 source 集合移动到 destination 集合。详情
127.0.0.1:6379> sadd myset a b c d e  # 添加创建set
(integer) 5
127.0.0.1:6379> smembers myset       # 查询set元素
1) "c"
2) "a"
3) "d"
4) "b"
5) "e"
127.0.0.1:6379> sismember myset c    # 查询set中某元素是否存在
(integer) 1
127.0.0.1:6379> sismember myset z    
(integer) 0                         # 0 不存在
127.0.0.1:6379> scard myset
(integer) 5
127.0.0.1:6379> srem myset c         # 移除某元素
(integer) 1
127.0.0.1:6379> smembers myset
1) "b"
2) "d"
3) "a"
4) "e"
127.0.0.1:6379> srandmember myset     #随机查询
"b"
127.0.0.1:6379> srandmember myset
"e"
127.0.0.1:6379> srandmember myset
"d"
127.0.0.1:6379> spop myset           # 随机弹出
"a"
127.0.0.1:6379> smembers myset
1) "b"
2) "d"
3) "e"
127.0.0.1:6379> sadd myset2  g h i j k   
(integer) 5
127.0.0.1:6379> smove myset myset2 d    # 将一个set中某元素移动到另外一个set中
(integer) 1
127.0.0.1:6379> smembers myset2
1) "i"
2) "h"
3) "d"
4) "j"
5) "g"
6) "k"

集合操作

标题
sdiff返回一个集合的全部成员,该集合是所有给定集合之间的差集。不存在的 key 被视为空集。
sinter返回一个集合的全部成员,该集合是所有给定集合的交集。不存在的 key 被视为空集。当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
sunion返回一个集合的全部成员,该集合是所有给定集合的并集。不存在的 key 被视为空集。
127.0.0.1:6379> sadd set1 a b c d  
(integer) 4
127.0.0.1:6379> sadd set2 c d e
(integer) 3
127.0.0.1:6379> sdiff set1 set2   # 差集。前面有的元素后面没有
1) "a"
2) "b"
127.0.0.1:6379> sinter set1 set2   # 交集
1) "c"
2) "d"
127.0.0.1:6379> sunion set1 set2   # 并集
1) "d"
2) "b"
3) "c"
4) "a"
5) "e"