Redis学习笔记之集合

集合(set)类型也是用来保存多个字符串成员,但和列表类型不一样的是,集合中不允许有重复成员,并且集合中的成员是无序的,不能通过索引下标获取成员,一个集合最多可以存储2的32次方减1个成员。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集。

1. 集合内操作

(1) 添加成员

sadd key member [member ...]

返回结果为添加成功的成员个数,例如:

192.168.211.131:7001> sadd set:1 1 2 3 4
(integer) 4

(2) 删除成员

srem key member [member ...]

返回结果为删除成员个数,例如:

192.168.211.131:7004> srem set:1 4
(integer) 1

(3) 计算成员个数

scard key

scard的时间复杂度为O(1),它不会遍历集合所有成员,而是直接用redis内部的变量,例如:

192.168.211.131:7004> scard set:1
(integer) 3

(4) 判断成员是否在集合中

sismember key member

如果给定成员在集合内返回1,反之返回0,例如

192.168.211.131:7004> sismember set:1 2
(integer) 1
192.168.211.131:7004> sismember set:1 4
(integer) 0

(5) 随机从集合返回指定个数成员

192.168.211.131:7004> srandmember set:1

"3"

192.168.211.131:7002> srandmember set:1 2
1) "1"
2) "2"

(6) 从集合随机弹出成员

spop key [count]

spop操作可以从集合中随机弹出成员,个数由count指定,例如下面代码是一次spop后,集合成员变为0、1、3、4、6、7、8:

192.168.211.131:7004> spop set:1 3
1) "9"
2) "5"
3) "2"
192.168.211.131:7004> smembers set:1
1) "0"
2) "1"
3) "3"
4) "4"
5) "6"
6) "7"
7) "8"

(7) 获取所有成员

smembers key

下面代码获取集合set:1所有成员,并且返回结果是无序的:

192.168.211.131:7004> smembers set:1
1) "0"
2) "1"
3) "3"
4) "4"
5) "6"
6) "7"
7) "8"

2. 集合间操作

现在有2个集合set:1和set:2,

set:1:0 1 3 4 6 7 8
set:2:0 1 3 5 7

(1) 求多个集合的交集

sinter key [key ...]

下面是求set:1和set:2两个集合的交集:

192.168.211.131:6379> sinter set:1 set:2
1) "0"
2) "1"
3) "3"
4) "7"

(2) 求多个集合的并集

sunion key [key ...]

下面是求set:1和set:2两个集合的并集:

192.168.211.131:6379> sunion set:1 set:2
1) "0"
2) "1"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"

(3) 求多个集合的差集

sdiff key [key ...]

下面是求set:1和set:2两个集合的差集:

192.168.211.131:6379> sdiff set:1 set:2
1) "4"
2) "6"
3) "8"

(4) 将交集、并集、差集的结果保存

sinterstore destination key [key ...]
sunionstore destination key [key ...]
sdiffstore destination key [key ...]

集合间的运算在成员较多的情况下会比较耗时,索引redis提供了上面三个命令(原命令+store)将集合间交集、并集、差集的结果保存在destination key中,例如下面操作将set:1和set:2两个集合的交集保存在set:1_2:inter中,set:1_2:inter本身也是集合类型:

192.168.211.131:6379> sinterstore set:1_2:inter >set:1 set:2
(integer) 4
192.168.211.131:6379> smembers set:1_2:inter
1) "0"
2) "1"
3) "3"
4) "7"

上一篇:Oracle学习笔记之19c 权限和角色概述


下一篇:Redis学习笔记之字符串和哈希命令