5.Redis数据类型(四)

SET

SADD

SADD key member [member ...]

将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。

127.0.0.1:6379> SADD set1 1 1 1 2 2 2 3 4 5
(integer) 5
127.0.0.1:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SADD set1 9
(integer) 1
127.0.0.1:6379> SADD set1 9
(integer) 0

SMEMBERS 

SMEMBERS key

返回集合中的所有的成员

127.0.0.1:6379> SADD myset1 hello
(integer) 1
127.0.0.1:6379> SADD myset1 world
(integer) 1
127.0.0.1:6379> SMEMBERS myset1
1) "hello"
2) "world"

SISMEMBER/SMISMEMBER

SISMEMBER key member
判断成员元素是否是集合的成员。
SMISMEMBER key member [member ...]
判断成员单个或多个元素是否是集合的成员。

127.0.0.1:6379> SADD myset11 hello
(integer) 1
127.0.0.1:6379> SISMEMBER myset11 hello
(integer) 1
127.0.0.1:6379> SISMEMBER myset11 word
(integer) 0


127.0.0.1:6379> SADD myset one
(integer) 1
127.0.0.1:6379> SADD myset two
(integer) 1
127.0.0.1:6379> SMISMEMBER myset one two three four
1) (integer) 1
2) (integer) 1
3) (integer) 0
4) (integer) 0

SREM

SREM key member [member ...]
用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
127.0.0.1:6379> SADD myset2 aa bb cc dd ee ff
(integer) 6
127.0.0.1:6379> SREM myset2 aa
(integer) 1
127.0.0.1:6379> SREM myset2 yy
(integer) 0
127.0.0.1:6379> SMEMBERS myset2
1) "dd"
2) "bb"
3) "ff"
4) "cc"
5) "ee"
127.0.0.1:6379> SREM myset2 dd  hhhhhhhh
(integer) 1
127.0.0.1:6379> SMEMBERS myset2
1) "bb"
2) "ff"
3) "cc"
4) "ee"

SCARD

SCARD key
返回集合中元素的数量
127.0.0.1:6379> SADD myset3 hello
(integer) 1
127.0.0.1:6379> SADD myset3 world
(integer) 1
127.0.0.1:6379> SCARD myset3
(integer) 2

SRANDMEMBER

SRANDMEMBER key [count]
用于返回集合中的随机元素。
如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
127.0.0.1:6379> SADD set5 1 2 3 4 5 6 7 8 9 10
(integer) 10
127.0.0.1:6379> SRANDMEMBER set5 2 
1) "6"
2) "1"
127.0.0.1:6379> SRANDMEMBER set5 1
1) "9"
127.0.0.1:6379> SRANDMEMBER set5 8
1) "7"
2) "6"
3) "10"
4) "3"
5) "5"
6) "1"
7) "9"
8) "8"
127.0.0.1:6379> SRANDMEMBER set5 0
(empty array)
127.0.0.1:6379> SRANDMEMBER set5 -1
1) "7"
127.0.0.1:6379> SRANDMEMBER set5 -5
1) "6"
2) "10"
3) "1"
4) "2"
5) "3"
127.0.0.1:6379> SRANDMEMBER set5 -8
1) "3"
2) "9"
3) "5"
4) "8"
5) "5"
6) "3"
7) "9"
8) "8"

SPOP

SPOP key [count]
移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素。该命令类似 Srandmember 命令,但 SPOP 将随机元素从集合中移除并返回,而 Srandmember 则仅仅返回随机元素,而不对集合进行任何改动。
127.0.0.1:6379> SMEMBERS set5
 1) "1"
 2) "2"
 3) "3"
 4) "4"
 5) "5"
 6) "6"
 7) "7"
 8) "8"
 9) "9"
10) "10"
127.0.0.1:6379> SPOP set5 2
1) "1"
2) "7"
127.0.0.1:6379> SMEMBERS set5
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"
6) "8"
7) "9"
8) "10"

SMOVE

SMOVE source destination member
将指定成员 member 元素从 source 集合移动到 destination 集合。SMOVE 是原子性操作。
如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。
当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。
127.0.0.1:6379> SADD set11  aa bb cc dd ee
(integer) 5
127.0.0.1:6379> SADD set22 aa bb 1 2 3 5
(integer) 6
127.0.0.1:6379> SMOVE set11 set22 cc
(integer) 1
127.0.0.1:6379> SMEMBERS set11
1) "bb"
2) "aa"
3) "dd"
4) "ee"
127.0.0.1:6379> SMEMBERS set22
1) "bb"
2) "2"
3) "3"
4) "cc"
5) "aa"
6) "1"
7) "5"
127.0.0.1:6379> SMOVE set11 set22 aa
(integer) 1
127.0.0.1:6379> SMEMBERS set11
1) "dd"
2) "bb"
3) "ee"
127.0.0.1:6379> SMEMBERS set22
1) "bb"
2) "2"
3) "3"
4) "cc"
5) "aa"
6) "1"
7) "5"

SDIFF

SDIFF key [key ...]

返回第一个集合与其他集合之间的差异,也可以认为说第一个集合中独有的元素。不存在的集合 key 将视为空集。

差集的结果来自前面的第一个key ,而不是后面的 其他key,也不是所有key的差集。

key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SDIFF key1 key2 key3 = {b,d}
127.0.0.1:6379> SADD set1 a b c 1 2
(integer) 5
127.0.0.1:6379> SADD set2 1 2 3 a x
(integer) 5
127.0.0.1:6379> SDIFF set1 set2
1) "b"
2) "c"
127.0.0.1:6379> SDIFF set2 set1
1) "x"
2) "3"

SUNION

SUNION key [key ...]
返回给定集合的并集。不存在的集合 key 被视为空集。
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SUNION key1 key2 key3 = {a,b,c,d,e}
127.0.0.1:6379> SMEMBERS set1 
1) "2"
2) "a"
3) "b"
4) "c"
5) "1"
127.0.0.1:6379> SMEMBERS set2
1) "2"
2) "3"
3) "a"
4) "x"
5) "1"
127.0.0.1:6379> SUNION set1 set2
1) "2"
2) "x"
3) "3"
4) "a"
5) "b"
6) "c"
7) "1"

SINTER

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

key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SINTER key1 key2 key3 = {c}

127.0.0.1:6379> SMEMBERS set1 
1) "2"
2) "a"
3) "b"
4) "c"
5) "1"
127.0.0.1:6379> SMEMBERS set2
1) "2"
2) "3"
3) "a"
4) "x"
5) "1"
127.0.0.1:6379> SINTER set1 set2
1) "2"
2) "a"
3) "1"
127.0.0.1:6379> SINTER set1 set2 set3
(empty array)

SINTERCARD

SINTERCARD numkeys key [key ...] [LIMIT limit]

redis7版本开始

它不返回结果集,而只返回结果的基数。返回由所有给定集合的交集产生的集合的基数。

基数就是就是交集的元素个数

127.0.0.1:6379> SADD set1 a b c 1 2
(integer) 5
127.0.0.1:6379> SADD set2 1 2 3 a x
(integer) 5
127.0.0.1:6379> SINTERCARD 2 set1 set2
(integer) 3
127.0.0.1:6379> SINTERCARD 2 set1 set2 limit 1
(integer) 1
127.0.0.1:6379> SINTERCARD 2 set1 set2 limit 2
(integer) 2
127.0.0.1:6379> SINTERCARD 2 set1 set2 limit 5
(integer) 3
127.0.0.1:6379> SADD set3 8 9 10
(integer) 3
127.0.0.1:6379> SINTERCARD 3 set1 set2 set3  
(integer) 0

使用简单小例子:

微信抽奖小程序
1 用户ID,立即参与按钮   SADD key 用户ID

 2.显示已经有多少人参与了抽奖

SCARD key

3 抽奖(从set中任意选取N个中奖人)

SRANDMEMBER key 2       随机抽奖2个人,元素不删除

SPOP  key 3                         随机抽奖3个人,元素会删除

微信朋友圈点赞

     pub:msgID(朋友圈某个消息id) 

1 新增点赞

sadd pub:msgID 点赞用户ID1  点赞用户ID2

2 取消点赞

srem pub:msgID 点赞用户ID1  

3 展现所有点赞过的用户

smembers pub:msgID

4 点赞用户数统计,就是常见的点赞红色数字

scard pub:msgID

5 判断某个朋友是否对楼主点赞过

SISMEMBER pub:msgID 用户ID

其他使用场景:

给用户添加标签,跟我们上面的例子一样。一个人对应多个不同的标签。

好友/关注/粉丝/感兴趣的人集合,可以使用上面的取交集、并集相关的命令。

等等。

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值