25

Redis | Redis 集合相关命令

 3 years ago
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 集合相关命令

原创 码农UP2U 码农UP2U 6天前
Redis 笔记

640?wx_fmt=gif

640

        Redis 支持多种数据结构,比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 集合 相关的命令,也就是关于 Sets 相关的命令,如下图。

640

        上图中用红色圈中的部分,就是关于 集合 相关的命令。如果想要在 Redis 中查看相关的命令也可以使用 help 命令来进行查看,命令如下。

127.0.0.1:6379> help @set

        在按下回车后,可以看到相应分类命令的说明,如下图。

640

        图中就是部分关于 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) 1127.0.0.1:6379> sismember lang python(integer) 0

4、smembers

        获取指定集合中的所有元素

127.0.0.1:6379> smembers lang1) "java"2) "c++"

5、smove

        移动集合中的一个元素到另外一个集合中

127.0.0.1:6379> smove lang otherlang c++(integer) 1127.0.0.1:6379> smembers otherlang1) "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 lang1) "c++"2) "java"3) "php"4) "ruby"5) "scala"6) "python"7) "lua"

        获取一个值:

127.0.0.1:6379> spop lang 11) "scala"

        可以看到返回的是第五个值,获取的这个值已经从集合中删除,查看集合中的元素

127.0.0.1:6379> smembers lang1) "java"2) "php"3) "ruby"4) "c++"5) "python"6) "lua"

        获取两个值

127.0.0.1:6379> spop lang 21) "c++"2) "python"

        可以看到返回了两个值,且返回的这两个值已经从集合中删除了,查看集合中的元素

127.0.0.1:6379> smembers lang1) "java"2) "php"3) "ruby"4) "lua"

        可以看到,获取的值是随机的

        目前集合中还有四个值,我们这次使用 spop 来获取五个元素,

127.0.0.1:6379> spop lang 51) "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) 7127.0.0.1:6379> smembers lang1) "c++"2) "ruby"3) "java"4) "php"5) "asm"6) "python"7) "lua"

        测试 srandmember 命令

127.0.0.1:6379> srandmember lang 11) "lua"127.0.0.1:6379> srandmember lang 21) "lua"2) "c++"127.0.0.1:6379> srandmember lang 51) "ruby"2) "php"3) "c++"4) "python"5) "lua"127.0.0.1:6379> srandmember lang 11) "java"

        可以看到,每次返回的元素是不同的

8、srem

        从集合中删除一个或多个元素,它的格式如下:

srem key member [member ...]



127.0.0.1:6379> srandmember lang 11) "java"127.0.0.1:6379> srem lang java(integer) 1127.0.0.1:6379> srem lang c++ python(integer) 2127.0.0.1:6379> smembers lang1) "ruby"2) "php"3) "asm"4) "lua"

9、sinter

        获得两个集合的交集,这里的交集就是数学上的交集,也就是两个集合拥有的相同的元素,指令格式如下:

sinter key [key ...]

        首先,我们重新来定义两个集合。

127.0.0.1:6379> sadd zhangsan java c++ python ruby(integer) 4127.0.0.1:6379> sadd lisi python c java php(integer) 4

        这里有两个集合,分别是 zhangsan 和 lisi,现在来看 zhangsan  和 lisi 有的共同的元素。

127.0.0.1:6379> sinter zhangsan lisi1) "java"2) "python"

        sinter 可以得到多个集合的交集

10、sunion

        获得两个集合的并集,这里的并集就是数学上的并集,也就是两个集合的所有元素,指令格式如下:

sunion key [key ...]

        接着用 sunion 的例子来看两个集合的并集,

127.0.0.1:6379> sunion zhangsan lisi1) "c"2) "ruby"3) "java"4) "php"5) "c++"6) "python"

        sunion 可以得到多个集合的并集

11、sdiff

        获取两个集合的差集,这里的差集是数学上的差集,指令格式如下:

sdiff key [key ...]

        差集和交集、并集不太相同,看例子:

127.0.0.1:6379> sdiff zhangsan lisi1) "ruby"2) "c++"

        zhangsan 和 lisi 的差集,也就是 zhangsan 中有的,而 lisi 中没有的,这就是 zhangsan 和 lisi 的差集。

        再来看下面的例子:

127.0.0.1:6379> sdiff lisi zhangsan1) "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) 2127.0.0.1:6379> smembers result1) "java"2) "python"

13、sunionstore

        获取两个集合的并集,并将结果保存到一个 key 中

14、sdiffstore

        获取两个集合的差集,并将结果保存到一个 key 中

总结

        Redis 的集合类型提供的命令还是比较多的,它不但可以当作一个集合来用,它的 交集、并集 和 差集 还可以实现一些较为有意思的功能。

        Redis 常用的几种基本数据类型总结完成后,我会再逐步的梳理 Redis 的各种应用场景,希望大家可以喜欢。

640
640

640640


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK