目录
SADD 插入集合
SCARD 取元素数量
SPOP 随机移除元素
SREM 移除多个元素
SMOVE 移动元素到别的集合
SMEMBERS 取所有成员
SRANDMEMBER 取指定数量元素
SISMEMBER 判断元素是否存在
SUNION 多集合求并集
SUNIONSTORE 多集合求并集(存储)
SINTER 多集合求交集
SINTERSTORE 多集合求取交集(存储)
SDIFF 多集合求取差集
SDIFFSTORE 多集合求取差集(存储)
SSCAN 迭代
SADD key member [member ...]:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset a b c d e f g h i j k l m n # 向key中添加集合元素,key不存在则自动创建空的key集合
(integer) 14
127.0.0.1:6379> set name lisi # 初始化非集合key
OK
127.0.0.1:6379> sadd name zhangsan # 向非集合中执行sadd
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N), N 是被添加的元素的数量。
返回值:
SCARD key:返回集合中的元素数量
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> scard myset2 # 不存在key
(integer) 0
127.0.0.1:6379> sadd myset a b c d e f g h i j k l m n
(integer) 14
127.0.0.1:6379> scard myset # 存在集合key
(integer) 14
127.0.0.1:6379> set name lisi # 初始化非集合key
OK
127.0.0.1:6379> scard name # 对非集合key执行scard命令
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(1)。
返回值:
SPOP key:移除并返回集合中的一个随机元素。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset a # 初始化集合
(integer) 1
127.0.0.1:6379> spop myset
"a"
127.0.0.1:6379> spop myset # 集合为空
(nil)
127.0.0.1:6379> spop myset2 # 不存在的key
(nil)
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> spop name # key 不为集合
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(1)。
返回值:
SREM key member [member ...]:移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset a b c d e # 初始化集合
(integer) 5
127.0.0.1:6379> srem myset a b c d # 移除 a b c d
(integer) 4
127.0.0.1:6379> srem myset a b c d e
(integer) 1 # 移除 a b c d e,不存在元素忽视了
127.0.0.1:6379> srem myset2 a
(integer) 0 # 移除不存在key似为空集合
127.0.0.1:6379> set name list
OK
127.0.0.1:6379> srem name 1 # key不为集合,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度为O(N), N 为给定 member 元素的数量
返回值:
SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b # 初始化集合
(integer) 2
127.0.0.1:6379> smove s1 dest a # 移动集合
(integer) 1
127.0.0.1:6379> smembers s1 # 查看集合元素
1) "b"
127.0.0.1:6379> smembers dest # 查看dest元素
1) "a"
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> smove s1 name b # 有非集合key报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(1)。
返回值:
SMEMBERS key:返回集合 key 中的所有成员。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b c d e
(integer) 5
127.0.0.1:6379> smembers s1
1) "d"
2) "b"
3) "a"
4) "c"
5) "e"
127.0.0.1:6379> smembers s2
(empty array)
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> smembers name
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N), N 为集合的基数。
返回值:
SRANDMEMBER key [count]:取指定数量count的元素。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> srandmember s1
"a"
127.0.0.1:6379> srandmember s1 2
1) "a"
2) "b"
127.0.0.1:6379> srandmember s1 5
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> srandmember s1 -5
1) "a"
2) "c"
3) "a"
4) "c"
5) "c"
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> srandmember lisi
(nil)
时间复杂度:
如果提供了 count 参数,那么为 O(N) ,N 为返回数组的元素个数。
返回值:
SISMEMBER key member:判断 member 元素是否集合 key 的成员。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b c # 初始化集合
(integer) 3
127.0.0.1:6379> sismember s1 a # 查看是否存在
(integer) 1
127.0.0.1:6379> sismember s1 f
(integer) 0
127.0.0.1:6379> sismember s2 f # 不存在key似为空集合
(integer) 0
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> sismember name f # 对非集合key操作,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(1)。
返回值:
SUNION key [key ...]:返回一个集合的全部成员,该集合是所有给定集合的并集。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset a b # 初始化集合
(integer) 2
127.0.0.1:6379> sadd myset2 a b c d # 初始化集合
(integer) 4
127.0.0.1:6379> sunion myset myset2 myset3 # myset3不存在被似为空集合
1) "d"
2) "a"
3) "b"
4) "c"
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> sunion myset name # 有key存在且不为集合,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N), N 是所有给定集合的成员数量之和。
返回值:
SUNIONSTORE destination key [key ...]:与SUNION操作相似。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b # 初始化集合
(integer) 2
127.0.0.1:6379> sadd s2 c
(integer) 1
127.0.0.1:6379> sunionstore dest s1 s2 s3 # 取并集
(integer) 3
127.0.0.1:6379> smembers dest # 查看dest信息
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> sunionstore dest s1 s2 s3 name # 有非命令key报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N), N 是所有给定集合的成员数量之和。
返回值:
SINTER key [key ...]:返回所有给定集合的交集。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b c d e # 初始化集合
(integer) 5
127.0.0.1:6379> sadd s2 b e f g # 初始化集合
(integer) 4
127.0.0.1:6379> sinter s1 s2 # 取交集
1) "e"
2) "b"
127.0.0.1:6379> sinter s1 s2 s3 # 取交集,有不存在的key似为空集
(empty array)
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> sinter s1 s2 name # 存在不为集合的key报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N * M), N 为给定集合当中基数最小的集合, M 为给定集合的个数。
返回值:
SINTERSTORE destination key [key ...]:跟SINTER操作相似。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 a b d # 初始化集合
(integer) 3
127.0.0.1:6379> sadd s2 d e f # 初始化集合
(integer) 3
127.0.0.1:6379> sinterstore dest s1 s2
(integer) 1
127.0.0.1:6379> smembers dest # 查看集合dest
1) "d"
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> sinterstore dest s1 s2 name # 存在不为集合的key
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N * M), N 为给定集合当中基数最小的集合, M 为给定集合的个数。
返回值:
SDIFF key [key ...]:取给定集合之间的差集
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd myset a b c d e # 初始化几个集合key
(integer) 5
127.0.0.1:6379> sadd myset2 d e
(integer) 2
127.0.0.1:6379> sadd myset3 c d
(integer) 2
127.0.0.1:6379> sdiff myset myset2 myset3 # 取三个集合的差集
1) "b"
2) "a"
127.0.0.1:6379> sdiff myset myset2 myset3 myset4 # 取4个集合的差集,其中一个不存在似为空集合
1) "b"
2) "a"
127.0.0.1:6379> set name lisi # 定义一个非集合key
OK
127.0.0.1:6379> sdiff myset myset2 myset3 myset4 name # 有一个key不为集合
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N), N 是所有给定集合的成员数量之和。
返回值:
SDIFFSTORE destination key [key ...]:与SDIFF操作相拟。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd s1 'baidu' 'google' 'alibaba' 'banana' # 初始化集合
(integer) 4
127.0.0.1:6379> sadd s2 'apple' 'banana' 'orange' # 初始化集合
(integer) 3
127.0.0.1:6379> sdiffstore dest s1 s2 # 求差集并保存到dest中
(integer) 3
127.0.0.1:6379> smembers dest # 查看dest中元素
1) "baidu"
2) "google"
3) "alibaba"
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> sdiffstore dest s1 name # 存在不为集合的key报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N), N 是所有给定集合的成员数量之和。
返回值: