Redis的集合以无序的方式存储多个各不相同的元素,用户可以快速对集合执行添加元素、移除元素以及检查元素是否存在于集合中的操作。
常用命令
命令 | 用例 | 描述 | 注意 |
---|---|---|---|
sadd | sadd key item[item …] | 将一个或多个元素插入到集合中,并返回被添加元素当中原本不存在于集合中的数量 | |
srem | srem key item[item …] | 从集合中移除一个或多个元素,并返回移除元素的个数 | |
sismember | sisrember key item | 检查元素是否存在,存在为1,不存在为0 | |
smembers | smembers key | 返回集合中所有的元素 | |
scard | scard key | 返回集合中的元素个数 | |
srandmember | srandmember key [count] | 返回集合中随机的一个或多个元素,如果count>0则返回元素不会重复,否则可能会重复 | |
spop | spop key | 随机弹出一个元素,并返回被移除的元素 | |
smove | smove source-key dest-key item | 如果source集合包含元素item,则将item从source移除并添加到dest集合中,如果item成功移除则返回1,否则返回0 |
添加元素 sadd
插入1和2,并返回2,说明插入成功了2个元素
127.0.0.1:6379> sadd set1 1 2
(integer) 2
再次插入元素1,返回0,说明集合中已经有元素1了
127.0.0.1:6379> sadd set1 1
(integer) 0
移除元素 srem
移除集合中存在的元素
127.0.0.1:6379> srem set1 1
(integer) 1
移除集合中不存在的元素
127.0.0.1:6379> srem set1 1
(integer) 0
移除集合中的多个元素
127.0.0.1:6379> srem set1 1 2 3
(integer) 1
返回的值为移除成功元素的个数
检查元素是否存在
127.0.0.1:6379> sadd set1 1 2 3 4
(integer) 4
127.0.0.1:6379> sismember set1 1
(integer) 1
查询集合中的所有元素
127.0.0.1:6379> smembers set1
1) "1"
2) "2"
3) "3"
4) "4"
查询集合中的元素个数
127.0.0.1:6379> scard set1
(integer) 4
随机返回元素 srandmemeber
127.0.0.1:6379> srandmember set1
"2"
127.0.0.1:6379> srandmember set 10
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> srandmember set -10
1) "2"
2) "2"
3) "2"
4) "3"
5) "4"
6) "3"
7) "1"
8) "4"
9) "4"
10) "2"
随机移除一个元素
127.0.0.1:6379> spop set1
"2"
转移元素
转移存在的
127.0.0.1:6379> smove set1 set2 1
(integer) 1
转移不存在的
127.0.0.1:6379> smove set1 set2 10
(integer) 0
高级命令:组合和关联
用于组合和处理多个集合的命令,集合真正厉害的地方在组合和关联多个集合。
命令 | 用例 | 描述 | 注意 |
---|---|---|---|
sdiff | sdiff key [key …] | 返回那些存在于第一个集合但不存在于其他集合中的元素(数学上的差级运算) | |
sdiffstore | sdiffstore dest-key key [key …] | 将sdiff的结果存到dest集合中 | |
sinter | sinter key [key …] | 返回多个集合的都有的元素(数学中的交集运算) | |
sinterstore | sinterstore dest-key key [key …] | 将sinter的结果存储到dest集合中 | |
sunion | sunion key [key …] | 返回多个集合中的所有元素(数学中的并集) | |
sunionstore | sunion dest-key key [key …] | 将sunion的结果存储到dest集合中 |
sdiff 差集
查看两个集合的元素
127.0.0.1:6379> smembers set
1) "1"
2) "3"
3) "4"
127.0.0.1:6379> smembers set2
1) "1"
sdiff的结果:只返回第一个集合中有,但其他集合中没有的元素
127.0.0.1:6379> sdiff set1 set2
1) "3"
2) "4"
127.0.0.1:6379> sdiff set2 set1
(empty list or set)
sdiffstore 差集存储
# set1 和set2 的差集
127.0.0.1:6379> sdiff set1 set2
1) "3"
2) "4"
# set3 中是空的
127.0.0.1:6379> smembers set3
(empty list or set)
# 执行sdiffstore,返回影响的元素数
127.0.0.1:6379> sdiffstore set3 set set2
(integer) 2
# set3 中成功添加了set1和set2的差集
127.0.0.1:6379> smembers set3
1) "3"
2) "4"
sinter 交集
127.0.0.1:6379> smembers set1
1) "1"
2) "3"
3) "4"
127.0.0.1:6379> smembers set2
1) "1"
# set1 和set2 的交集
127.0.0.1:6379> sinter set1 set2
1) "1"
sinterstore 交集存储
127.0.0.1:6379> smembers set4
(empty list or set)
127.0.0.1:6379> sinterstore set4 set set2
(integer) 1
127.0.0.1:6379> smembers set4
1) "1"
sunion 并集
127.0.0.1:6379> sunion set1 set2
1) "1"
2) "3"
3) "4"