Redis的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
。
集合中最大的成员数为 (超过40亿)。
Redis Sadd
命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
假如集合key不存在,则创建一个只包含添加的元素作成员的集合。
当集合key不是集合类型时,返回一个错误。
语法
127.0.0.1:6379> SADD KEY_NAME VALUE1..VALUEN
返回值
被添加到集合中的新元素的数量,不包括被忽略的元素
示例
127.0.0.1:6379> SADD myset "hello"
(integer) 1
127.0.0.1:6379> SADD myset "foo"
(integer) 1
127.0.0.1:6379> SADD myset "hello"
(integer) 0
127.0.0.1:6379> SMEMBERS myset
1) "hello"
2) "foo"
Redis Scard
命令返回集合中元素的数量。
语法
127.0.0.1:6379> SCARD KEY_NAME
返回值
0
示例
127.0.0.1:6379> SADD myset "hello"
(integer) 1
127.0.0.1:6379> SADD myset "foo"
(integer) 1
127.0.0.1:6379> SADD myset "hello"
(integer) 0
127.0.0.1:6379> SCARD myset
(integer) 2
Redis Sdiff
命令返回给定集合之间的差集。不存在的集合 key 将视为空集。
差集的结果来自前面的FIRST_KEY
,而不是后面的OTHER_KEY1
,也不是整个FIRST_KEY OTHER_KEY1..OTHER_KEYN
的差集。
语法
127.0.0.1:6379> SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN
返回值
包含差集成员的列表
示例
127.0.0.1:6379> SADD key1 "a"
(integer) 1
127.0.0.1:6379> SADD key1 "b"
(integer) 1
127.0.0.1:6379> SADD key1 "c"
(integer) 1
127.0.0.1:6379> SADD key2 "c"
(integer) 1
127.0.0.1:6379> SADD key2 "d"
(integer) 1
127.0.0.1:6379> SADD key2 "e"
(integer) 1
127.0.0.1:6379> SDIFF key1 key2
1) "a"
2) "b"
Redis Sdiffstore
命令将给定集合之间的差集存储在指定的集合中。如果指定的集合key已存在,则会被覆盖。
语法
127.0.0.1:6379> SDIFFSTORE DESTINATION_KEY KEY1..KEYN
返回值
结果集中的元素数量
示例
127.0.0.1:6379> SADD myset "hello"
(integer) 1
127.0.0.1:6379> SADD myset "foo"
(integer) 1
127.0.0.1:6379> SADD myset "bar"
(integer) 1
127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
127.0.0.1:6379> SADD myset2 "world"
(integer) 1
127.0.0.1:6379> SDIFFSTORE destset myset myset2
(integer) 2
127.0.0.1:6379> SMEMBERS destset
1) "foo"
2) "bar"
Redis Sinter
命令返回给定所有给定集合的交集。不存在的集合key被视为空集。当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
语法
127.0.0.1:6379> SINTER KEY KEY1..KEYN
返回值
交集成员的列表
示例
127.0.0.1:6379> SADD myset "hello"
(integer) 1
127.0.0.1:6379> SADD myset "foo"
(integer) 1
127.0.0.1:6379> SADD myset "bar"
(integer) 1
127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
127.0.0.1:6379> SADD myset2 "world"
(integer) 1
127.0.0.1:6379> SINTER myset myset2
1) "hello"
Redis Sinterstore
命令将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖。
语法
127.0.0.1:6379> SINTERSTORE DESTINATION_KEY KEY KEY1..KEYN
返回值
交集成员的列表
示例
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
127.0.0.1:6379> SADD myset1 "foo"
(integer) 1
127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
127.0.0.1:6379> SADD myset2 "world"
(integer) 1
127.0.0.1:6379> SINTERSTORE myset myset1 myset2
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "hello"
Redis Sismember
命令判断成员元素是否是集合的成员。
语法
127.0.0.1:6379> SISMEMBER KEY VALUE
返回值
1
0
示例
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
127.0.0.1:6379> SISMEMBER myset1 "hello"
(integer) 1
127.0.0.1:6379> SISMEMBER myset1 "world"
(integer) 0
Redis Smembers
命令返回集合中的所有的成员。不存在的集合key被视为空集合。
语法
127.0.0.1:6379> SMEMBERS KEY_NAME
返回值
集合中的所有成员
示例
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
127.0.0.1:6379> SADD myset1 "world"
(integer) 1
127.0.0.1:6379> SMEMBERS myset1
1) "World"
2) "Hello"
Redis Smove
命令将指定成员member
元素从source
集合移动到destination
集合。SMOVE
是原子性操作。
如果source
集合不存在或不包含指定的member
元素,则 SMOVE 命令不执行任何操作,仅返回0
。否则,member
元素从source
集合中被移除,并添加到destination
集合中去。
当destination
集合已经包含member
元素时,SMOVE
命令只是简单地将source
集合中的member
元素删除。
当source
或destination
不是集合类型时,返回一个错误。
语法
127.0.0.1:6379> SMOVE SOURCE DESTINATION MEMBER
返回值
1
source
集合的成员,并且没有任何操作对destination
集合执行,那么返回0
示例
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
127.0.0.1:6379> SADD myset1 "world"
(integer) 1
127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
127.0.0.1:6379> SADD myset2 "foo"
(integer) 1
127.0.0.1:6379> SMOVE myset1 myset2 "bar"
(integer) 1
127.0.0.1:6379> SMEMBERS myset1
1) "World"
2) "Hello"
127.0.0.1:6379> SMEMBERS myset2
1) "foo"
2) "bar"
Redis Spop
命令用于移除并返回集合中的一个随机元素。
语法
127.0.0.1:6379> SPOP KEY_NAME
返回值
nil
示例
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
127.0.0.1:6379> SADD myset1 "world"
(integer) 1
127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
127.0.0.1:6379> SPOP myset1
"bar"
127.0.0.1:6379> SMEMBERS myset1
1) "Hello"
2) "world"
Redis Srandmember
命令用于返回集合中的一个随机元素。
从Redis 2.6版本开始,Srandmember
命令接受可选的count
参数:
count
为正数,且小于集合基数,那么命令返回一个包含count
个元素的数组,数组中的元素各不相同。如果count
大于等于集合基数,那么返回整个集合。count
为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count
的绝对值。该操作和SPOP
相似,但SPOP
将随机元素从集合中移除并返回,而Srandmember
则仅仅返回随机元素,而不对集合进行任何改动。
语法
127.0.0.1:6379> SRANDMEMBER KEY [count]
返回值
nil
count
参数,那么返回一个数组;如果集合为空,返回空数组示例
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
127.0.0.1:6379> SADD myset1 "world"
(integer) 1
127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
127.0.0.1:6379> SRANDMEMBER myset1
"bar"
127.0.0.1:6379> SRANDMEMBER myset1 2
1) "Hello"
2) "world"
Redis Srem
命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
当key不是集合类型,返回一个错误。
语法
127.0.0.1:6379> SREM KEY MEMBER1..MEMBERN
返回值
被成功移除的元素的数量,不包括被忽略的元素
示例
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
127.0.0.1:6379> SADD myset1 "world"
(integer) 1
127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
127.0.0.1:6379> SREM myset1 "hello"
(integer) 1
127.0.0.1:6379> SREM myset1 "foo"
(integer) 0
127.0.0.1:6379> SMEMBERS myset1
1) "bar"
2) "world"
Redis Sunion
命令返回给定集合的并集。不存在的集合key被视为空集。
语法
127.0.0.1:6379> SUNION KEY KEY1..KEYN
返回值
并集成员的列表
示例
127.0.0.1:6379> SADD key1 "a"
(integer) 1
127.0.0.1:6379> SADD key1 "b"
(integer) 1
127.0.0.1:6379> SADD key1 "c"
(integer) 1
127.0.0.1:6379> SADD key2 "c"
(integer) 1
127.0.0.1:6379> SADD key2 "d"
(integer) 1
127.0.0.1:6379> SADD key2 "e"
(integer) 1
127.0.0.1:6379> SUNION key1 key2
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"
Redis Sunionstore
命令将给定集合的并集存储在指定的集合destination
中。如果destination
已经存在,则将其覆盖。
语法
127.0.0.1:6379> SUNIONSTORE DESTINATION KEY KEY1..KEYN
返回值
结果集中的元素数量
示例
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
127.0.0.1:6379> SADD myset1 "world"
(integer) 1
127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
127.0.0.1:6379> SADD myset2 "hello"
(integer) 1
127.0.0.1:6379> SADD myset2 "bar"
(integer) 1
127.0.0.1:6379> SUNIONSTORE myset myset1 myset2
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "bar"
2) "world"
3) "hello"
4) "foo"