自学内容网 自学内容网

Redis:set类型


当把一些关联的数据放到一起,就构成一个集合。在Redis中,使用set类型维护集合。set维护一个不允许重复元素的无序集合,每个集合元素类型都是String


set命令

SADD
  • 将一个或多个元素添加到set中,如果不存在则创建一个集合
sadd key member [member ...]

返回本次操作添加成功的元素个数。

示例:

在这里插入图片描述

第一次saddset1不存在,此时创建集合并且插入1 2 3,返回3表示成功插入三个数字。第二次sadd,由于数字2 3已经存在,所以只插入了4 5,返回2表示成功插入两个元素。


SMEMBERS
  • 获取set中的所有元素
smembers key

示例:

查询刚才创建的set1

在这里插入图片描述


SISMEMBER
  • 判定元素是否在集合中
sismember key member

如果存在返回1,不存在返回0

示例:

在这里插入图片描述


SCARD
  • 获取集合的元素个数
scard key

返回集合的元素个数。


SPOP
  • 随机获取并删除一个或多个元素
spop key [count]

返回获取到的元素。

示例:

在这里插入图片描述

第一次spop获取元素4,既不是头也不是尾,第二次spop又得到两个随机值5 1,确实值是随机的。

官方文档中声明,spop得到的值是随机的,就算是两个相同的集合,同样的操作得到的值也不一样。因为Redis源码中给spop增加了一个生成随机成员的过程,是真正做了随机功能。


SRANDMEMBER
  • 获取set中的随即元素
srandmember key [count]

返回随机获取到的元素,count表示要获取的元素个数。

示例:

在这里插入图片描述


SMOVE
  • 将一个元素从源set移动到目的set
smove source destination member

其中source是源集合,destination是目的集合,member是被移动的元素。返回0表示移动失败,返回1表示成功。

示例:

在这里插入图片描述

此处将set2中的666元素移动到了set1中。

在移动过程中,可能出现以下两种情况:

  1. member已经在destination中存在,此时会将membersource中删除,并且spop返回1视为移动成功
  2. membersource中不存在,此时spop返回0,表示移动失败

SREM
  • 删除set中的指定元素
srem key member [member ...]

返回删除成功的元素个数。


集合间操作

除了基本的集合命令,Redis还提供了集合之间的一些命令。

SINTER
  • 对多个集合求交集
sinter key [key ...]

返回集合之间的交集。

示例:

在这里插入图片描述


SINTERSTORE
  • 求出多个集合的交集,并输出到destination
sinterstore destination key [key ...]

返回交集的元素个数。

示例:

在这里插入图片描述

此处将set1set2的交集输出到set4中,sinterstore返回3表示交集有三个元素。


SUNION
  • 得到多个set的并集
sunion key [key ...]

返回多个集合的并集。

在这里插入图片描述


SUNIONSTORE
  • 求出多个集合的并集,并输出到destination
sunionstore destination key [key ...]

返回并集中元素的个数。


SDIFF
  • 求出多个集合的差集
sdiff key [key ...]

返回差集的结果。

示例:

在这里插入图片描述

此处要注意,做差是有先后顺序的,set1 - set2set2 - set1的结果是不一样的。


SDIFFSTORE
  • 求出多个集合的差集,并输出到destination
sdiffstore key [key ...]

返回差集中元素的个数。


  • 总结
命令功能
sadd添加元素
srem删除元素
scard获取集合元素个数
sismember检测元素是否在集合中
srandmember获取随机集合元素
spop随机删除集合元素
smembers获取集合所有元素
sinter集合求并集
sinterstore集合求并集,输出到指定集合
sunion集合求交集
sunionstore集合求交集,输出到指定集合
sdiff集合求差集
sdiffstore集合求差集,输出到指定集合

内部编码

intset

整数集合,对正数进行了特定优化。当set中的元素都是整数,并且元素个数小于set-max-intset-entries(默认512个)时,Redis使用intset实现set


hashtable

当集合类型不满足以上条件,也就是成员数量太多,或者有成员不是int,那么采用hashtable哈希表来实现set



原文地址:https://blog.csdn.net/fsdfafsdsd/article/details/142713964

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!