您的位置:首页 > 数据库 > Redis

Redis笔记5:数据类型之集合(Set)

2017-03-02 00:07 555 查看
命令               描述                          语法
SADD              添加值                         SADD key member [member ...]
SMEMBERS          遍历集合                       SMEMBERS key
SCARD             获取key的成员数量               SCARD key
SISMEMBER         判断成员是否存在                 SISMEMBER key member
Spop              随机删除元素                    Spop key
SREM              删除指定的成员                   SREM key member [member ...]
SRANDMEMBER       随机返回成员,不删除原值          SRANDMEMBER key
SMOVE             移动一个集合的成员到另一个集合     SMOVE source destination member
SDIFF             求集合差集                       SDIFF key [key ...]
SDIFFSTORE        集合中的差集存储到新集合中         SDIFFSTORE destination key [key ...]
SINTER            求集合交集                       SINTER key [key ...]
SINTERSTORE       将集合交集存储到新集合            SINTERSTORE destination key [key ...]
SUNION            求集合并集                       SUNION key [key ...]
SUNIONSTORE       将集合的并集存储到新集合          SUNIONSTORE destination key [key ...]


1、SADD key member [member …]

将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。假如 key 不存在,则创建一个只包含 member 元素作成员的集合。当 key 不是集合类型时,返回一个错误。

返回值: 被添加到集合中的新元素的数量,不包括被忽略的元素。

示例:

127.0.0.1:6379[15]> SADD bbs "discuz.net"   # 添加单个元素
(integer) 1
127.0.0.1:6379[15]> SADD bbs "discuz.net"   # 添加重复元素
(integer) 0
127.0.0.1:6379[15]> SADD bbs "tianya.cn" "groups.google.com"   # 添加多个元素
(integer) 2
127.0.0.1:6379[15]> SMEMBERS bbs
1) "tianya.cn"
2) "groups.google.com"
3) "discuz.net"


2、SMEMBERS key

返回集合 key 中的所有成员。不存在的 key 被视为空集合。

返回值: 集合中的所有成员。

示例:

127.0.0.1:6379[15]> EXISTS not_exists_key
(integer) 0
127.0.0.1:6379[15]> SMEMBERS not_exists_key
(empty list or set)
127.0.0.1:6379[15]> SADD language c++ .net java
(integer) 3
127.0.0.1:6379[15]> SMEMBERS language
1) "java"
2) ".net"
3) "c++"


3、SCARD key

返回集合中元素的数量。

返回值: 集合的元素数量。当 key 不存在时,返回 0 。

示例:

127.0.0.1:6379[15]> SADD language c++ .net java
(integer) 3
127.0.0.1:6379> SCARD language
(integer) 3


4、SISMEMBER key member

判断 member 元素是否集合 key 的成员。

返回值: 如果 member 元素是集合的成员,返回 1 。 如果 member 元素不是集合的成员,或 key 不存在,返回 0 。

示例:

127.0.0.1:6379[15]> SADD "joe's_movies" "hi,lady" "fast five" "2012"
(integer) 3
127.0.0.1:6379[15]> SMEMBERS "joe's_movies"
1) "fast five"
2) "hi,lady"
3) "2012"
127.0.0.1:6379[15]> SISMEMBER "joe's_movies" 2012
(integer) 1


5、SPOP key

移除并返回集合中的一个随机元素。 如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用SRANDMEMBER 命令。

返回值: 被移除的随机元素。 当 key 不存在或 key 是空集时,返回 nil 。

示例:

127.0.0.1:6379[15]> SADD mydb MySql MongoDB Redis
(integer) 3
127.0.0.1:6379[15]> SPOP mydb
"Redis"
127.0.0.1:6379[15]> SMEMBERS mydb
1) "MySql"
2) "MongoDB"
127.0.0.1:6379[15]> SPOP mydb
"MySql"
127.0.0.1:6379[15]> SMEMBERS mydb
1) "MongoDB"


6、SREM key member [member …]

移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。 当 key 不是集合类型,返回一个错误。

返回值: 被成功移除的元素的数量,不包括被忽略的元素。

示例:

127.0.0.1:6379[15]> SADD languages c lisp python ruby
(integer) 4
127.0.0.1:6379[15]> SMEMBERS languages
1) "python"
2) "lisp"
3) "c"
4) "ruby"

127.0.0.1:6379[15]> SREM languages ruby                 # 移除单个元素
(integer) 1
127.0.0.1:6379[15]> SREM languages non-exists-language  #移除不存在的元素
(integer) 0
127.0.0.1:6379[15]> SREM languages lisp python c        # 移除多个元素
(integer) 3
127.0.0.1:6379[15]> SMEMBERS languages
(empty list or set)


7、SRANDMEMBER key [count]

返回集合中的一个随机元素。如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count 的绝对值。

返回值: 只提供 key 参数时,返回一个元素;如果集合为空,返回 nil 。 如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。

示例:

127.0.0.1:6379> SADD fruit apple banana cherry
(integer) 3
127.0.0.1:6379> SRANDMEMBER fruit
"banana"
127.0.0.1:6379> SRANDMEMBER fruit 2
1) "cherry"
2) "apple"
127.0.0.1:6379> SRANDMEMBER fruit 10
1) "banana"
2) "cherry"
3) "apple"
127.0.0.1:6379> SRANDMEMBER fruit 0
(empty list or set)
127.0.0.1:6379> SRANDMEMBER fruit -1
1) "apple"


8、SMOVE source destination member

将 member 元素从 source 集合移动到 destination 集合。如果 source 集合不存在或不包含指定的 member 元素,则SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。 当 destination 集合已经包含 member 元素时,SMOVE 命令只是简单地将 source 集合中的 member 元素删除。 当 source 或 destination 不是集合类型时,返回一个错误。

返回值: 如果 member 元素被成功移除,返回 1 。 如果 member 元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回。

示例:

127.0.0.1:6379> SADD myset1 a b c d
(integer) 4
127.0.0.1:6379> SADD myset2 b
(integer) 1
127.0.0.1:6379> SMOVE myset1 myset2 a           #移动a,myset2中不存在的元素
(integer) 1
127.0.0.1:6379> SMEMBERS myset1
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> SMEMBERS myset2
1) "b"
2) "a"


127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> SADD myset1 a b c d
(integer) 4
127.0.0.1:6379> SADD myset2 b
(integer) 1
127.0.0.1:6379> SMOVE myset1 myset2 b           #移动b,myset2中已经有了的元素
(integer) 1
127.0.0.1:6379> SMEMBERS myset1
1) "c"
2) "d"
3) "a"
127.0.0.1:6379> SMEMBERS myset2
1) "b"


9、SDIFF key [key …]

返回给定集合之间的差集。不存在的集合 key 将视为空集。

返回值: 包含差集成员的列表。

示例:

127.0.0.1:6379[15]> SADD myset1 a b c
(integer) 3
127.0.0.1:6379[15]> SADD myset2 c d e
(integer) 3
127.0.0.1:6379[15]> SDIFF myset1 myset2
1) "c"


10、SDIFFSTORE destination key [key …]

将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖。

返回值: 结果集中的元素数量。

示例:

redis 127.0.0.1:6379> SADD myset1 "hello" "foo" "bar"
(integer) 3
redis 127.0.0.1:6379> SADD myset2 "hello" "world"
(integer) 2
redis 127.0.0.1:6379> SDIFFSTORE destset myset1 myset2
(integer) 2
redis 127.0.0.1:6379> SMEMBERS destset
1) "foo"
2) "bar"


11、SINTER key [key …]

返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。

返回值: 交集成员的列表。

示例:

redis 127.0.0.1:6379> SADD myset1 "hello" "foo" "bar"
(integer) 3
redis 127.0.0.1:6379> SADD myset2 "hello" "world"
(integer) 2
redis 127.0.0.1:6379> SINTER myset myset2
1) "hello"


12、SINTERSTORE DESTINATION_KEY KEY KEY1..KEYN

将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖。

返回值: 交集成员的列表。

示例:

redis 127.0.0.1:6379> SADD myset1 "hello" "foo" "bar"
(integer) 3
redis 127.0.0.1:6379> SADD myset2 "hello" "world"
(integer) 2
redis 127.0.0.1:6379> SINTERSTORE myset myset1 myset2
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset
1) "hello"


13、SUNION KEY KEY1..KEYN

返回给定集合的并集。不存在的集合 key 被视为空集。

返回值: 并集成员的列表。

示例:

redis 127.0.0.1:6379> SADD myset1 "hello" "foo" "bar"
(integer) 3
redis 127.0.0.1:6379> SADD myset2 "hello" "world"
(integer) 2
redis 127.0.0.1:6379> SUNION myset1 myset2
1) "bar"
2) "world"
3) "hello"
4) "foo"


14、SUNIONSTORE DESTINATION KEY KEY1..KEYN

将给定集合的并集存储在指定的集合 destination 中。

返回值: 结果集中的元素数量。

示例:

redis 127.0.0.1:6379> SADD myset1 "hello" "foo" "bar"
(integer) 3
redis 127.0.0.1:6379> SADD myset2 "hello" "world"
(integer) 2
redis 127.0.0.1:6379> SUNIONSTORE myset myset1 myset2
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset
1) "bar"
2) "world"
3) "hello"
4) "foo"


(完毕!)

参考: http://blog.csdn.net/thinkercode/article/details/46575413
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: