集合简单说明
Redis的集合(set)允许用户将任意多个不相同的元素存储到集合中,这些元素既可以是文本数据也可以是二进制数据。前面说过列表也允许存储多个元素,但集合与列表有以下两点明显不同:
- 列表可以存储重复元素,而集合只会存储非重复元素。尝试将一个已存在的元素添加到集合,将会被忽略
- 二列表以有序方式存储元素而集合以无序方式存储元素
这两个差异带来的区别主要跟命令的复杂度有关系:
- 在执行项linsert和lrem这样的列表命令时,即使命令只针对单个列表元素程序有时也不得不遍历整个列表已确定指定的元素是否存在,因此这些命令的复杂度都为O(N)
- 对于集合来说,因为所有针对单个元素的集合命令都不须要遍历整个集合,所以命令复杂度都为O(1)
如下示例,展示一个名为database的集合,这个集合包含8个元素。
Redis为集合提供了一系列操作命令,通过这些命令,用户可以:
- 将新元素添加到集合中,或者从集合中移除已有的元素
- 将指定的元素从一个集合移动到另一个集合
- 获取集合包含的所有元素
- 获取集合包含的元素数量
- 检查给定元素是否存在于集合中
- 从集合中随机地获取指定数量的元素
- 对多个集合执行交集、并集、差集计算
集合命令说明
sadd:将元素添加到集合
通过使用sadd命令,用户可以将一个或多个元素添加到集合中。
sadd key element [element ...]
这个命令会返回成功添加的新元素,数量作为返回值。
下面通过示例展示sadd命令向集合db中添加元素的过程:
下面图示展示上述命令构建过程
因为集合不存储相同的元素,如果用户在使用sadd命令,向集合中添加元素的时候,命令会自动忽略,以存在的元素只将不存在于集合中的新元素,添加到集合中并返回添加成功的元素的数量。
例如,上述集合db中已经包含7个元素,当再次尝试将"Redis"、"MySql" 添加集合中的时候,命令返回添加成功的元素个数为0,表示没有任何元素添加到集合中
下面示例中,再次向集合中添加"Redis"、"MySql"、"Neo4j"元素。因为集合中不存在Neo4j元素,存在"Redis"、"MySql"两个元素,成功添加的元素个数为1。