3.集合
Redis的集合以无序的方式来存储多个各不相同的元素,用户可以快速对集合执行添加元素的操作、移出元素操作以及检查一个元素是否存在于集合里。本节将对最常用的集合命令进行介绍,包括插入命令、移出命令、将元素从一个集合移动到另一个集合的命令,以及对多个集合执行交集运算的命令。
一些常用的集合命令
命令 | 用例和描述 |
---|---|
SADD | SADD key-name item [item ...] --将一个或多个元素添加到集合里面,并返回被添加元素当中原本并不存在与集合里面的元素数量 |
SREM | SREM key-name item --从集合里面移出一个或多个元素,并返回被移出元素的数量 |
SISMEMBER | SISMEMBER key-name item --检查元素item是否存在于集合key-name 里 |
SCARD | SCARD key-name --返回集合包含的所有元素的数量 |
SMEMBERS | SMEMBERS key-name --返回集合包含的所有元素 |
SRANDMEMBER | SRANDMEMBER key-name [count] --从集合里面随机地返回一个或多个元素,当count为正数时,命令返回的随机元素不会重复;当count为负数时,命令返回的随机元素可能会出现重复 |
SPOP | SPOP key-name --随即地移除集合中的一个元素,并返回被移除的元素 |
SMOVE | SMOVE source-key dest-key item --如果集合source-key 包含元素item,那么从集合source-key里面移除元素item,并将元素item,添加到集合dest-key中,如果item被成功移除,那么明林赶回1,否则返回0 |
下面来一波实操:
# SADD命令会将那些目前并不存在于集合里面的元素添加到集合里面,并返回被添加元素的数量
127.0.0.1:6379> sadd set-key a b c
(integer) 3
# srem函数在元素被成功移除时返回剩余的个数,移除失败时返回0即代表没有移除成功
127.0.0.1:6379> srem set-key c d
(integer) 1
127.0.0.1:6379> srem set-key c d
(integer) 0
# 查看集合包含元素的数量
127.0.0.1:6379> scard set-key
(integer) 2
# 获取集合包含的所有元素
127.0.0.1:6379> smembers set-key
1) "b"
2) "a"
# 将元素从一个集合移动到另一个集合,在执行smove操作的时候,如果用户想要移动的元素不存在于第一个集合里,那么移动操作就 不会执行。
127.0.0.1:6379> smove set-key set-key2 a
(integer) 1
127.0.0.1:6379> smove set-key set-key2 c
(integer) 0
127.0.0.1:6379> smembers set-key2
1) "a"
127.0.0.1:6379>
通过使用上面展示的命令,我们可以将各不相同的多个元素添加到集合里面,单集合真正厉害的地方在于组合和关联多个集合。
用于组合和处理多个集合的Redis命令
命令 | 用例和描述 |
---|---|
SDIFF | SDIFF key-name [key-name ...] --返回那些存在于第一个集合,但不存在于其他集合中的元素(数学上的差集运算) |
SDIFFSTORE | SDIFFSTORE dest-key key-name [key-name ...] --将那些存在于第一个集合但并不存在于其他集合中的元素存储到dest-key键里面 |
SINTERSTORE | SINTERSTORE dest-key key-name [key-name ...] --将那些同事存在于所有集合的元素(数学上的交集运算)存储到dest-key键里面 |
SUNION | SUNION key-name [key-name ...] --返回那些至少存在于一个集合中的元素(数学上的并及计算) |
SUNIONSTORE | SUNIONSTORE dest-key key-name [key-name ...] --将那些至少存在于一个集合中的元素(数学上的并集计算)存储到dest-key键里面 |
这些命令分别是并集运算、交集运算和差集运算这3个操作的返回结果版本和存储结果版本,一下给出实例:
# 给skey1和skey2集合中添加元素
127.0.0.1:6379> sadd skey1 a b c d
(integer) 4
127.0.0.1:6379> sadd skey2 c d e f
(integer) 4
# 计算出第一个集合里面移出第二个集合包含的所有的元素
127.0.0.1:6379> sdiff skey1 skey2
1) "a"
2) "b"
# 计算出同时存在于两个集合里面的所有元素
127.0.0.1:6379> sinter skey1 skey2
1) "c"
2) "d"
#计算出两个集合包含的所有各不相同的元素
127.0.0.1:6379> sunion skey1 skey2
1) "a"
2) "e"
3) "f"
4) "c"
5) "b"
6) "d"
127.0.0.1:6379>
以上就是Redis集合的差集、交集、并集运算的示例。
不怕从零开始,只怕从未启程!
参考文献:
菜鸟教程:https://www.runoob.com/redis/redis-keys.html
《Redis实战》Josiah L. Carlson著
网友评论