Redis | Redis 集合相关命令
source link: https://mp.weixin.qq.com/s/rfjS5qDDtjW7AJzfhHTGJw
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Redis | Redis 集合相关命令
Redis 支持多种数据结构,比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 集合 相关的命令,也就是关于 Sets 相关的命令,如下图。
上图中用红色圈中的部分,就是关于 集合 相关的命令。如果想要在 Redis 中查看相关的命令也可以使用 help 命令来进行查看,命令如下。
127.0.0.1:6379> help @set
在按下回车后,可以看到相应分类命令的说明,如下图。
图中就是部分关于 Sets 相关的部分命令。
常用 Sets 相关命令
Sets 数据类型是 Key 对应的 Value 的类型,在 Redis 中所有的 Key 都是字符串,所谓的数据类型表示的是 Value 的类型。在 Sets 中的 Value 是一个集合,集合是无序的,不可以重复的。
为了大家能够直接复制命令进行测试,下面我就不截图了。
1、sadd
添加一个或者多个元素到集合里,命令格式如下:
sadd key member [member ...]
例子如下:
127.0.0.1:6379> sadd lang java c++
(integer) 2
sadd 命令中 lang 是 key,而 java 和 c++ 是两个元素,或者也可以称为两个值,两个成员。
Sets 和 List 类似,它的 key 对应多个 value,不像 String 类型,一个 key 对应一个 value。
Sets 集合是不可以重复的,因此添加相同的元素会失败,测试如下:
127.0.0.1:6379> sadd lang java
(integer) 0
2、scard
获取集合中的元素个数
127.0.0.1:6379> scard lang
(integer) 2
3、sismember
判断一个值是否在指定的集合中
127.0.0.1:6379> sismember lang java
(integer) 1
127.0.0.1:6379> sismember lang python
(integer) 0
4、smembers
获取指定集合中的所有元素
127.0.0.1:6379> smembers lang
1) "java"
2) "c++"
5、smove
移动集合中的一个元素到另外一个集合中
127.0.0.1:6379> smove lang otherlang c++
(integer) 1
127.0.0.1:6379> smembers otherlang
1) "c++"
一次只能移动一个元素
127.0.0.1:6379> smove lang otherlang c++ java
(error) ERR wrong number of arguments for 'smove' command
如果要移动元素不存在,也是移动不到另外一个集合当中的
127.0.0.1:6379> smove lang otherlang python
(integer) 0
6、spop
返回指定集合中的一个元素,并删除,它的指令格式如下:
spop key [count]
在测试前再添加几个元素
127.0.0.1:6379> sadd lang python php ruby lua scala
(integer) 5
查看集合中的元素
127.0.0.1:6379> smembers lang
1) "c++"
2) "java"
3) "php"
4) "ruby"
5) "scala"
6) "python"
7) "lua"
获取一个值:
127.0.0.1:6379> spop lang 1
1) "scala"
可以看到返回的是第五个值,获取的这个值已经从集合中删除,查看集合中的元素
127.0.0.1:6379> smembers lang
1) "java"
2) "php"
3) "ruby"
4) "c++"
5) "python"
6) "lua"
获取两个值
127.0.0.1:6379> spop lang 2
1) "c++"
2) "python"
可以看到返回了两个值,且返回的这两个值已经从集合中删除了,查看集合中的元素
127.0.0.1:6379> smembers lang
1) "java"
2) "php"
3) "ruby"
4) "lua"
可以看到,获取的值是随机的
目前集合中还有四个值,我们这次使用 spop 来获取五个元素,
127.0.0.1:6379> spop lang 5
1) "ruby"
2) "php"
3) "java"
4) "lua"
127.0.0.1:6379> smembers lang
(empty list or set)
从上面可以看出,虽然我们打算获取 5 个元素,但是实际只有 4 个,再获取完最后四个元素后,lang 集合中已经没有值了。
7、srandmember
从集合中随机返回若干元素,它的指令格式和 spop 类似,它只返回元素而不从集合中删除
srandmember key [count]
在测试之前,先添加若干个元素
127.0.0.1:6379> sadd lang java c++ php python lua ruby asm
(integer) 7
127.0.0.1:6379> smembers lang
1) "c++"
2) "ruby"
3) "java"
4) "php"
5) "asm"
6) "python"
7) "lua"
测试 srandmember 命令
127.0.0.1:6379> srandmember lang 1
1) "lua"
127.0.0.1:6379> srandmember lang 2
1) "lua"
2) "c++"
127.0.0.1:6379> srandmember lang 5
1) "ruby"
2) "php"
3) "c++"
4) "python"
5) "lua"
127.0.0.1:6379> srandmember lang 1
1) "java"
可以看到,每次返回的元素是不同的
8、srem
从集合中删除一个或多个元素,它的格式如下:
srem key member [member ...]
127.0.0.1:6379> srandmember lang 1
1) "java"
127.0.0.1:6379> srem lang java
(integer) 1
127.0.0.1:6379> srem lang c++ python
(integer) 2
127.0.0.1:6379> smembers lang
1) "ruby"
2) "php"
3) "asm"
4) "lua"
9、sinter
获得两个集合的交集,这里的交集就是数学上的交集,也就是两个集合拥有的相同的元素,指令格式如下:
sinter key [key ...]
首先,我们重新来定义两个集合。
127.0.0.1:6379> sadd zhangsan java c++ python ruby
(integer) 4
127.0.0.1:6379> sadd lisi python c java php
(integer) 4
这里有两个集合,分别是 zhangsan 和 lisi,现在来看 zhangsan 和 lisi 有的共同的元素。
127.0.0.1:6379> sinter zhangsan lisi
1) "java"
2) "python"
sinter 可以得到多个集合的交集
10、sunion
获得两个集合的并集,这里的并集就是数学上的并集,也就是两个集合的所有元素,指令格式如下:
sunion key [key ...]
接着用 sunion 的例子来看两个集合的并集,
127.0.0.1:6379> sunion zhangsan lisi
1) "c"
2) "ruby"
3) "java"
4) "php"
5) "c++"
6) "python"
sunion 可以得到多个集合的并集
11、sdiff
获取两个集合的差集,这里的差集是数学上的差集,指令格式如下:
sdiff key [key ...]
差集和交集、并集不太相同,看例子:
127.0.0.1:6379> sdiff zhangsan lisi
1) "ruby"
2) "c++"
zhangsan 和 lisi 的差集,也就是 zhangsan 中有的,而 lisi 中没有的,这就是 zhangsan 和 lisi 的差集。
再来看下面的例子:
127.0.0.1:6379> sdiff lisi zhangsan
1) "c"
2) "php"
这个例子当中,sdiff 后面跟着 lisi 这个集合,因此是 lisi 和 zhangsan 的差集,也就是 lisi 中有的,而 zhangsan 中没有的。
sdiff 可以得到多个集合的差集
12、sinterstore
获取两个集合的交集,并将结果保存到一个 key 中
这个命令和 sinter 命令类似,只是它会把交集的结果保存到一个 key 中进行存储,其指令格式如下:
sinterstore destination key [key ...]
127.0.0.1:6379> sinterstore result zhangsan lisi
(integer) 2
127.0.0.1:6379> smembers result
1) "java"
2) "python"
13、sunionstore
获取两个集合的并集,并将结果保存到一个 key 中
14、sdiffstore
获取两个集合的差集,并将结果保存到一个 key 中
总结
Redis 的集合类型提供的命令还是比较多的,它不但可以当作一个集合来用,它的 交集、并集 和 差集 还可以实现一些较为有意思的功能。
Redis 常用的几种基本数据类型总结完成后,我会再逐步的梳理 Redis 的各种应用场景,希望大家可以喜欢。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK