redis学习 第三章 5种数据类型----set类型

跟着Redis入门指南学习

第三章 5种数据类型----集合类型(set)

集合类型在redis内部是使用值为空的散列表(hash Table)实现的,所以这些操作的时间复杂度都是O(1)。最方便的是多个集合类型健之间可以进行并集、交集和差集运算。

3.5.2 命令

1.增加/删除元素

<span style="font-size:14px;">sadd key member [member ...]
srem key member [member ...]</span>
返回值是成功增加/删除的个数

<span style="font-size:14px;">127.0.0.1:6379[1]> sadd letters a b
(integer) 2
127.0.0.1:6379[1]> sadd letters b c d
(integer) 2
127.0.0.1:6379[1]> srem letters c e
(integer) 1</span>
2.获取集合中所有元素

<span style="font-size:14px;">smembers key</span>
<span style="font-size:14px;">127.0.0.1:6379[1]> smembers letters
1) "b"
2) "d"
3) "a"</span>
3.判断元素是否在集合中

<span style="font-size:14px;">sismember key member</span>
<span style="font-size:14px;">127.0.0.1:6379[1]> sismember letters a
(integer) 1
127.0.0.1:6379[1]> sismember letters e
(integer) 0</span>
无论集合中多少个元素,该操作的时间复杂度为O(1),1存在,0不存在。

4.集合间运算

<span style="font-size:14px;">sdiff key [key ...]   //多个集合执行差集运算
sinter key [key ...]  //多个集合执行交集运算
sunion key [key ...]  //多个集合执行并集运算</span>
127.0.0.1:6379[1]> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379[1]> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379[1]> sdiff setA setB
1) "1"
127.0.0.1:6379[1]> sdiff setB setA
1) "4"
127.0.0.1:6379[1]> sadd setC
(error) ERR wrong number of arguments for 'sadd' command
127.0.0.1:6379[1]> sadd setC 2 3
(integer) 2
127.0.0.1:6379[1]> sdiff setA setB setC
1) "1"
127.0.0.1:6379[1]> sinter setA setB
1) "2"
2) "3"
127.0.0.1:6379[1]> sinter setA setB setB
1) "2"
2) "3"
127.0.0.1:6379[1]> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379[1]> sadd setC 6
(integer) 1
127.0.0.1:6379[1]> sunion setA setB setC
1) "1"
2) "2"
3) "3"
4) "4"
5) "6"

3.5.4 命令拾遗

1.获取集合中元素个数

<span style="font-size:14px;">scard key</span>
scard 命令用来获得集合中的元素个数,

<span style="font-size:14px;">127.0.0.1:6379[1]> smembers letters
1) "b"
2) "d"
3) "a"
127.0.0.1:6379[1]> scard letters
(integer) 3</span>
2.进行集合运算并将结果存储

sdiffstore destination key [key ...]
sinterstore destination key [key ...]
sunionstore destination key [key ...]
sdiffstore 和 sdiff 功能一样,唯一的区别就是前者不会直接返回运算结果,而将结果存储在destination 健中。

3.随机获得集合中的元素

srandmember key [count]

127.0.0.1:6379[1]> smembers letters
1) "b"
2) "d"
3) "a"
127.0.0.1:6379[1]> srandmember letters
"a"
127.0.0.1:6379[1]> srandmember letters 2
1) "b"
2) "a"
127.0.0.1:6379[1]> srandmember letters 2
1) "b"
2) "d"
127.0.0.1:6379[1]> srandmember letters
"d"

count参数来一次随机获得多个元素,根据count的正负的不同,具体表现也不同。

(1)当count为正数时,srandmember会随机从集合中获得count个不重复的元素。如果count的值大于集合中的元素个数,则srandmember会返回集合中的全部元素。

(2)当count为负数时,srandmember会随机从集合获得|count|个的元素,这些元素有可能相同。

127.0.0.1:6379[1]> srandmember letters 100
1) "b"
2) "a"
3) "d"
127.0.0.1:6379[1]> srandmember letters -2
1) "b"
2) "b"
127.0.0.1:6379[1]> srandmember letters -10
 1) "d"
 2) "a"
 3) "d"
 4) "a"
 5) "b"
 6) "a"
 7) "b"
 8) "d"
 9) "a"
10) "a"

从上面结果可以看出,结果似乎不是随机的。主要是由于集合是采用的散列表结构存储的。散列表使用散列函数将元素映射到不同的存储位置(桶)上以实现O(1)时间复杂度的元素查找。

4.从集合中弹出一个元素

<span style="font-size:14px;">spop key</span>
<span style="font-size:14px;">127.0.0.1:6379[1]> sadd letters a b c d e f g
(integer) 7
127.0.0.1:6379[1]> spop letters 2
1) "a"
2) "f"
127.0.0.1:6379[1]> smembers letters
1) "g"
2) "d"
3) "c"
4) "b"
5) "e"
127.0.0.1:6379[1]> spop letters 2
1) "e"
2) "g"</span>
由于集合类型的元素是无序的,所以spop命令会从集合中随机选择一个元素弹出。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值