首页

5.4集合的创建和修改

关灯 护眼    字体:

上一章 章节列表 下一页


集合(Sets)是Redis的基本数据结构之一。

Redis中的集合与列表一样可以存放很多数据,但不同之处在于:集合里面的数据不能重复,也没有顺序。由于没有顺序,所以自然没有方向,不存在“左右侧”之说。

Redis的集合与Python的集合有非常多的相似之处,可以对比学习。集合有15条操作命令,本节将介绍其中常用的9条命令。



5.4.1 使用redis-cli实现


1.插入数据

集合的首字母为“S”,“添加”的英文为“Add”,所以向集合中添加数据的命令为“sadd”,命令格式如下:

sadd key value1 value2 value3

key 的命名方式与字符串和列表一样,可以使用数字、字母、下划线和中文,但不建议使用中文。

Value可以有一个或者多个。如果有多个Value,则每一个之间使用空格隔开;如果一个Value内部本身就有空格,则使用引号把它包起来。

以下为使用示例:

命令执行效果如图5-44所示。

图5-44 向Redis的集合中添加数据

向Redis集合中添加数据的过程如图5-45所示。

图5-45 集合插入数据示意图

从图5-45可以看出,由于集合里面的数据是没有顺序的,所以:

● 数据插入命令执行的先后顺序无关紧要。

● 在一条命令中,数据位于“value1”还是“value3”也无关紧要。

由于集合的数据是不重复的,如果在一条命令中同一个数据既是“value1”又是“value2”会怎么样?如果多条命令都插入了同一个数据又会怎么样?下面通过实际执行命令来看效果。

sadd example_set python golang python C Java

sadd example_set python

运行效果如图5-46所示。

图5-46 往集合中插入重复数据

从图5-46可以看出,第一次尝试插入“python”“golang”“python”“C”“Java”一共5个值,但实际上,Redis返回的数字“4”表示实际上只插入了4个值。这是因为有两个“python”,集合自动过滤了第2个“python”。

接下来单独插入一个值“python”,Redis 返回0,表示实际上什么数据都没有添加进“example_set”这个集合中。因为原来已经有“python”这个值了,所以,集合不再接收重复的数据。

2.读取数据

集合里面的数据虽然没有顺序也不能重复,但是可以查看集合里面一共有多少个数据。

(1)查询集合里面元素的数量。

查询集合数据量的命令是scard。其中,首字母“s”是“集合(Sets)”的首字母,“card”不是英文单词“卡片(Card)”,而是“基数(Cardinality)”的缩写。

命令格式如下:

scard key

例如执行以下命令:

scard example_set

执行效果如图5-47所示,表示集合“example_set”中有11条数据。

图5-47 查看集合内部有多少数据

(2)从集合中获取数据。

从集合中获取数据使用的命令为“spop”。由于集合里面的数据没有顺序,所以spop命令会随机获取集合中的数据,无法预测会获取哪一条数据。

“spop”命令的格式如下:

spop key count

其中,如果“count”省略,则表示随机获取1条数据。

● 如果“count”为其他大于1的整数,则会获取多条数据;

● 如果“count”对应的整数超过了集合总数据的条数,则获取集合中的所有数据,例如:

spop example_set

spop example_set 3

spop example_set 1000

运行效果如图5-48所示。获取一条数据后,这一条数据就被会被从集合中删除。

图5-48 从集合中弹出数据

(3)获取集合中的所有数据。

如果要获取所有数据,则可以使用以下命令:

smembers key

运行效果如图5-49所示。

图5-49 获取集合的所有数据

提示:

smembers命令不会删除数据。但是如果集合里的数据量极大,就应该慎重使用“获取所有数据”,因为这样会导致系统的I/O资源瞬间被耗尽。

(4)判断集合中是否包含某个元素。

sadd命令在遇到数据已经存在时,会返回“0”,如果数据不存则把数据插入再返回“1”。所以,这一条命令可以通过返回的数字来判断数据是否存在。

如果不想把数据插入集合,只是单纯想检查数据是否在集合中,那就要使用“sismember”命令。“sismember”命令的使用格式如下:

sismember key value

如果数据存在,则返回“1”;如果数据不存在,则返回“0”。例如:

sismember example_set 2

sismember example_set xxxx

运行效果如图5-50所示,如果看到“2”则表示数据是已经存在的,而如果看到“xxxx”则表示数据是不存在的。

图5-50 检查数据是否在集合中

3.删除数据

如果要从集合中删除特定的数据,可以使用命令“srem”,格式为:

srem key value1 value2 value3

例如:

srem exampl
m.qiduwx.com提示您,本章没有阅读完,点击下一页进入下一页阅读!

上一章 章节列表 下一页