set
redis set
是string
类型的无序集合.集合的成员是唯一的,不会出现重复数据.
redis set
是通过哈希表实现的,所以添加,删除,查找的复杂度是O(1)
redis set
最大成员数是$2^{32} -1$
1.常用命令
命令 描述 sadd key member1 [member2]
向集合中添加一个或多个成员 scard key
获取集合的成员数 sdiff key1 [key2]
求差集 sdiffstore destionation key1 [key2]
求差集并存储在 destination
中sinter key 1 [key2]
求交集 sinterstrore destionation key1 [key2]
求交集并存储在 destination
中sismember key member
判断 member
是否是key
的成员smembers key
返回集合中所有成员 smove source destination member
将元素从一个移动到另外一个 spop key
移除并返回集合中的一个随机元素 srandmember key [count]
返回集合中的一个或多个随机数 srem key member1 [member2]
移除集合 中一个或多个成员 sunion key1 [key2]
求并集 sunionstore destionation key1 [key2]
求并集并存储在 destination
中sscan key cursor
迭代集合中的元素
2.创建集合
- 创建
sadd
- 获取集合成员数
scard
- 获取集合中所有成员
smembers
- 判断集合中成员
sismember
# 添加单个元素 127.0.0.1:6379> sadd bbs 'discuz.net' (integer) 1 127.0.0.1:6379> smembers bbs 1) "discuz.net" # 添加重复元素 127.0.0.1:6379> sadd bbs 'discuz.net' (integer) 0 127.0.0.1:6379> smembers bbs 1) "discuz.net" # 添加多个元素 127.0.0.1:6379> sadd bbs 'tianya.cn' 'xxx.cn' (integer) 1 127.0.0.1:6379> smembers bbs 1) "tianya.cn" 2) "discuz.net" 3) 'xxx.cn' # 统计成员 127.0.0.1:6379> scard bbs (integer) 3 # 判断成员 127.0.0.1:6379> sismember bbs 'tianya.cn' (integer) 1
3.差集,交集,并集
差集:
sdiff key1 [key2 ]
:返回一个集合的所有成员,该集合是给定集合的差集sdiffstore destination key1 [key2]
:返回一个集合的所有成员,该集合是给定集合的差集,并保存在destination
中交集:
sinter key1 [key2]
:返回一个集合的所有成员,该集合是给定集合的交集sinterstore key1 [key2]
:返回一个集合的所有成员,该集合是给定集合的交集,并保存在destination
中.并集:
sunion key1 [key2]
:返回一个集合的所有成员,该集合是给定集合的b并集suionstore key1 [key2]
:返回一个集合的所有成员,该集合是给定集合的并集,并保存在destination
中127.0.0.1:6379> sadd JackLang 'Python' 'Java' 'C' (integer) 3 127.0.0.1:6379> sadd BobLang 'Python' 'Redis' 'MySQL' (integer) 3 127.0.0.1:6379> sdiff JackLang BobLang 1) "Java" 2) "C" 127.0.0.1:6379> sinter JackLang BobLang 1) "Python" 127.0.0.1:6379> sunion JackLang BobLang 1) "Python" 2) "MySQL" 3) "Java" 4) "C" 5) "Redis"
4. 删除并返回
spop key
: 移除并返回集合中的一个随机元素.smem key member1 [member2]
:移除集合key
中的一个或多个元素.\srangermember key count
:返回集合中的一个随机元素.如果count
为正数,且小于集合基数,返回count
个元素的数据,数组中的元素各不相同.如果count
大于等于集合基数,返回整个集合.count
为负数,返回一个数组,数组中的元素可能会重复出现.# 添加元素 redis> SADD fruit apple banana cherry (integer) 3 # 只给定 key 参数,返回一个随机元素 redis> SRANDMEMBER fruit "cherry" redis> SRANDMEMBER fruit "apple" # 给定 3 为 count 参数,返回 3 个随机元素 # 每个随机元素都不相同 redis> SRANDMEMBER fruit 3 1) "apple" 2) "banana" 3) "cherry" # 给定 -3 为 count 参数,返回 3 个随机元素 # 元素可能会重复出现多次 redis> SRANDMEMBER fruit -3 1) "banana" 2) "cherry" 3) "apple" redis> SRANDMEMBER fruit -3 1) "apple" 2) "apple" 3) "cherry" # 如果 count 是整数,且大于等于集合基数,那么返回整个集合 redis> SRANDMEMBER fruit 10 1) "apple" 2) "banana" 3) "cherry" # 如果 count 是负数,且 count 的绝对值大于集合的基数 # 那么返回的数组的长度为 count 的绝对值 redis> SRANDMEMBER fruit -10 1) "banana" 2) "apple" 3) "banana" 4) "cherry" 5) "apple" 6) "apple" 7) "cherry" 8) "apple" 9) "apple" 10) "banana" # SRANDMEMBER 并不会修改集合内容 redis> SMEMBERS fruit 1) "apple" 2) "cherry" 3) "banana" # 集合为空时返回 nil 或者空数组 redis> SRANDMEMBER not-exists (nil) redis> SRANDMEMBER not-eixsts 10 (empty list or set)