目录
- 一. Set集合类型简介.
- 二. 增加元素相关命令
- 2.1 向集合中添加元素(sadd)
- 2.2 从集合中移动元素( smove )
- 三. 查询元素相关操作.
- 3.1 查询集合中存在的所有元素.( smembers )
- 3.2 查询集合中是否存在member( sismember )
- 四. 随机获取集合中的元素
- 4.1 随机获取集合中的n个元素.(srandmember)
- 五. 删除元素相关操作
- 5.1 随机删除集合中的n个元素( spop )
- 5.2 指定删除集合中的n个元素.(srem)
- 六. 集合运算的相关操作.
- 6.1 求集合交集的操作(sinter)--->直接返回交集的结果
- 6.2 求集合交集的操作(sinterstore)---->将返回结果存储到另一个集合当中.
- 6.3 求集合并集的操作(sunion)---->直接返回并集的结果
- 6.4 求集合并集的操作(sunionstore)---->将返回结果存储到另一个集合当中
- 6.5 求集合差集的操作(sdiff)--->直接返回差集的结果
- 6.6 求集合差集的操作(sdiffstore)--->将返回结果存储到另一个集合当中
一. Set集合类型简介.
- Redis中Set类型是一种集合数据结构, Set集合中存储的元素是不允许重复的.
-
Set类型的特征:
- 无序性: Set中的元素是无须的, 这意味着你不能通过索引来访问(每次查询同一个元素在Set集合中的位置都是不固定的)
- 唯一性: Set中的每个元素都是唯一的, 不允许有重复的元素.
- 动态性: 可以随时向Set中添加或者删除元素.
-
Redis底层的编码方式:
- intset(整数集合): 当一个Set集合只包含整数值元素,并且这些元素的个数不超过512个时,Redis会使用intset作为底层存储结构。intset内部实际上是一个数组,用于存储整数类型的数据。由于数组是有序的,因此在查找数据时可以通过二分查找法实现快速查询,时间复杂度接近O(log n)。
-
hashtable(哈希表): 如果Set集合的元素不全是整数或者元素数量超过512个,Redis则会使用hashtable作为底层存储结构。在hashtable中,key为Set的值,value始终为null。这种设计使得Set能够高效地进行添加、删除和查找操作,因为哈希表的平均时间复杂度为O(1)。
二. 增加元素相关命令
2.1 向集合中添加元素(sadd)
- 命令基本格式:
SADD key member [member ...]
- 时间复杂度
O(N) N是member的元素个数, 一般可以近似看作是O(1)
-
演示命令的使用:
2.2 从集合中移动元素( smove )
- 命令基本格式:
SMOVE source destination member
- 时间复杂度
O(1)
-
演示命令的使用:
三. 查询元素相关操作.
3.1 查询集合中存在的所有元素.( smembers )
- 命令基本格式:
SMEMBERS key
- 时间复杂度
O(N) N为集合中元素的个数.
-
演示命令的使用:
3.2 查询集合中是否存在member( sismember )
- 命令基本格式:
SISMEMBER key member
- 时间复杂度
O(1)
-
演示命令的使用:
四. 随机获取集合中的元素
4.1 随机获取集合中的n个元素.(srandmember)
- 命令基本格式:
SRANDMEMBER key [count]
- 时间复杂度
O(N) N是count的值, 一般可以近似看作是O(1)
-
演示命令的使用:
五. 删除元素相关操作
5.1 随机删除集合中的n个元素( spop )
- 命令基本格式:
SPOP key [count]
- 时间复杂度
O(N) N是count的值, 一般可以近似看作是O(1)
-
演示命令的使用:
5.2 指定删除集合中的n个元素.(srem)
- 命令基本格式:
SREM key member [member ...]
- 时间复杂度:
O(N) N是要移除元素的个数, 一般可以近似看作是O(1)
-
演示命令的使用:
六. 集合运算的相关操作.
6.1 求集合交集的操作(sinter)—>直接返回交集的结果
- 命令基本格式:
SINTER key [key ...]
- 时间复杂度:
O( N*M ) N表示这些集合当中最小集合的元素个数, M表示求交集的集合个数.
6.2 求集合交集的操作(sinterstore)---->将返回结果存储到另一个集合当中.
- 命令基本格式:
SINTERSTORE destination key [key ...]
- 时间复杂度:
O( N*M ) N表示这些集合当中最小集合的元素个数, M表示求交集的集合个数.
-
演示命令的使用:
6.3 求集合并集的操作(sunion)---->直接返回并集的结果
- 命令基本格式:
SUNION key [key ...]
- 时间复杂度:
O(N) 其中N是给定集合中所有元素的个数.
6.4 求集合并集的操作(sunionstore)---->将返回结果存储到另一个集合当中
- 命令基本格式:
SUNIONSTORE destination key [key ...]
- 时间复杂度:
O(N) 其中N是给定集合中所有元素的个数.
-
演示命令的使用:
6.5 求集合差集的操作(sdiff)—>直接返回差集的结果
- 命令基本格式:
SDIFF key [key ...]
- 时间复杂度:
O(N) 其中N是所有给定集合中元素的总数。
6.6 求集合差集的操作(sdiffstore)—>将返回结果存储到另一个集合当中
- 命令基本格式:
SDIFFSTORE destination key [key ...]
- 时间复杂度:
O(N) 其中N是所有给定集合中元素的总数。
-
演示命令的使用: