【Redis】Set类型常用命令

时间:2024-10-15 07:14:17

目录

  • 一. 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类型的特征:
    1. 无序性: Set中的元素是无须的, 这意味着你不能通过索引来访问(每次查询同一个元素在Set集合中的位置都是不固定的)
    2. 唯一性: Set中的每个元素都是唯一的, 不允许有重复的元素.
    3. 动态性: 可以随时向Set中添加或者删除元素.
  • Redis底层的编码方式:
    1. intset(整数集合): 当一个Set集合只包含整数值元素,并且这些元素的个数不超过512个时,Redis会使用intset作为底层存储结构。intset内部实际上是一个数组,用于存储整数类型的数据。由于数组是有序的,因此在查找数据时可以通过二分查找法实现快速查询,时间复杂度接近O(log n)。
    2. 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是所有给定集合中元素的总数。

  • 演示命令的使用:
    在这里插入图片描述

相关文章