redis数据类型set
redis set
是string
类型的无序集合.集合的成员是唯一的,不会出现重复数据.
redis set
是通过哈希表实现的,所以添加,删除,查找的复杂度是O(1)
redis set
最大成员数是
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. 删除并返回
- END -
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)
点击左下角查看更多