redis的数据类型Set,其原生命令和php操作Redis Set函数介绍

时间:2021-09-28 20:34:12

Set类型介绍

Set是string类型元素的集合。集合成员是唯一的,不能出现重复的数据;集合是通过哈希表实现的,最大的成员数达到2^32-1个

Set原生命令

命令 命令描述 实例
SADD key member1 [member2] 向集合key添加一个或多个成员,已经存在的成员将被忽略;如果key不存在,则会创建集合key然后执行插入操作;key不是集合Set类型,则返回一个错误,成功则返回被添加到集合中的新元素的数量,被忽略的成员不算 SADD set1 'zhu','yu',返回:2
SPOP key [count] 移除集合key中的一个或多个随机成员,并返回被移除的成员;集合不存在或者为空的时候返回nil;count参数只有在3.2+版本以上才能使用 SPOP set1,返回:'yu'
SCARD key 返回集合中成员的个数,key不存在时返回0 SCARD set1, 返回:4
SMEMBERS key 返回集合中所有的成员。不存在的集合被视为空集合 SMEMBERS set1;返回:"lin" "qing" "yu" "shan"
SMOVE source destination member 将指定成员member从source集合移动到destination集合中,SMOVE是原子操作,要么移动成功,要么移动失败;如果source集合不存在或者source集合中不存在member成员,则SMOVE不做任何操作,返回0;否则将member成员从source移除,添加到destination中去,并返回1;如果destination中存在member,SMOVE则将source中的member删除掉;如果source或destination不是集合,则返回一个错误。如果destination不存在,则创建一个destination并写入member值 SMOVE set1 set2 'qing';则set2中存在值‘qing’,而set1中被删除
SREM key member1 [member2] 移除集合key中一个或者多个成员元素,如果member不存在,则忽略此成员元素;如果key不是集合类型,则返回一个错误;成功则返回被移除元素的个数,不包括被忽略的成员元素 SREM set2 'qing';返回:1
SRANDMEMBER key [count] 返回集合key中的一个或者count个成员元素,但是不删除key中相应的成员元素;如果count大于0且小于集合的大小,则返回count个成员元素组成的数组;如果count大于0且大于集合的大小,则返回整个集合;如果count小于0,则返回一个具有重复值的数组,长度为count的绝对值;count参数存在,如果集合为空,则返回一个空数组;count参数不存在,如果集合为空则返回nil。 SRANDMEMBER set1 2;返回:‘yu’ ‘lin’
SISMEMBER key member 判断成员元素member是否存在于集合key中,若存在则返回1,不存在或者key不存在返回0; SISMEMBER set1 'yu',返回1
SDIFF key1 [key2] 返回给定所有集合的差集,不存在的key视为空集。差集的结果来自于first_key,而不是其他的key,也不是所有的key的差集;返回值的类型是列表 set1('yu' 'lin' 'shan'),set2('lin','ops'),SDIFF set1 set2,返回‘yu’ ‘shan’
SDIFFSTORE destination key1 [key2] 返回所有集合的差集并存到集合destination中,如果destination已经存在,则会被覆盖 SDIFFSTORE set3 set1 set2,则set3的成员包括‘yu’ ‘shan’
SINTER key1 [key2] 返回给定的所有集合的交集。不存在的集合视为空集,当给定集合中存在空集则结果集也为空集;成功则返回交集成员列表 SINTER set1 set2,返回:‘lin’
SINTERSTORE destination key1 [key2] 返回给定集合的交集并存储到集合destination中,如果destination已经存在则将其覆盖;成功则返回交集的个数 SINTERSTORE set3 set1 set2;返回:1
SUNION key1 [key2] 返回所有给定集合的并集,不存在的集合视为空集 SUNION set1 set2,返回:"lin" "ops" "yu" "shan"
SUNIONSTORE destination key1 [key2] 将给定集合的并集写入到指定的集合destination中,如果destination已经存在,则将其覆盖;成功则返回并集的个数 SUNIONSTORE set3 set1 set2,返回:4
SSCAN key cursor [MATCH pattern] [COUNT count] 用于迭代集合中键的元素,返回数组列表 SSCAN set1 0 match *n,返回数组0=>['lin' 'shan']

php操作redis Set的函数

  • sAdd(key,value1,value2 .....)函数
    * 说明:将一个或多个value成员加入到集合key中,若key不存在,则新建集合key;
    * 参数:key(集合名称),value(将要插入集合key的成员)
    * 返回值:成功则返回插入到key中的成员个数,失败则返回false
    * php $ret = $redis->sAdd($key1,'zhu','yu'); var_dump($ret); /* 2 */
  • sPop(key,[count])函数
    * 说明:随机弹出集合key中的一个或者count个成员
    * 参数:key(集合名称),count(可选项,要弹出成员的个数)
    * 返回:count不存在,随机返回key中的一个成员;count存在,返回一个包含多个key成员的数组,count>key的长度,则返回整个集合组成的数组;若key不是Set类型,则返回false
    * 注意: redis的版本>=3.2才能使用count参数
    * php $redis->sAdd($key1,'lin','qing'); $ret = $redis->sPop($key1); var_dump($ret); /* ‘zhu’ */
  • sCard(key), sSize(key)函数
    * 说明:获取集合key中成员的个数,两个函数作用是相同的
    * 参数:key(集合名称)
    * 返回:成功则返回集合的长度,集合不存在则返回false
    * php $ret = $redis->sCard($key1); var_dump($ret); /* 4 */
  • sMembers(key), sGetMembers(key)函数
    * 说明:获取集合key中所有的成员,两个函数作用是相同的
    * 参数:key(集合名称)
    * 返回:成功则返回包含key所有成员的数组,数组是随机的,集合key为空,则返回一个空数组
    * php $ret = $redis->sMembers($key1); var_dump($ret); /* array(4) { [0]=> string(4) "qing" [1]=> string(3) "lin" [2]=> string(2) "yu" [3]=> string(3) "zhu" } */ $res = $redis->sMembers($key2); var_dump($res); /* array(0) { } */
  • sMove(srcKey,dstKey,member)函数
    * 说明:从srcKey中移除member,然后写入到dstKey中,此操作是原子操作,要么成功,要么失败;
    * 参数:srcKey,dstKey(集合名称),member(将要操作的成员)
    * 返回:执行成功返回true,失败则返回false(srcKey,dstKey,member不存在)
    * php $ret = $redis->sMove($key1,$key2,'yu'); var_dump($ret); /* bool(true) */ $redis->sMembers($key2); /* ‘yu’ */
  • sRem(key,member1,[member2],...), sRemove(key,member,[member2],...)函数
    * 说明:移除集合key中的成员member,两个函数作用是相同的
    * 参数: key(集合的名称),member(集合key中的成员)
    * 返回:返回从key中移除的成员的个数
    * php $ret = $redis->sRem($key1,'lin'); var_dump($ret); /* int(1) */
  • sRandMember(key,[count])函数
    * 说明:从集合key中随机取出一个或count个成员,但是不移除key中的成员
    * 参数:key(集合的名称),count(可选项,随机取出成员的个数)
    * 返回值:没有count参数,返回key中的一个成员(string);存在count,则返回随机取出的成员组成的数组(array):count>0且大于或等于集合key的大小,则返回整个集合;count>0且小于key的大小,则返回key中的count个成员,且不重复;count<0且绝对值小于key的大小,则返回|count|个不含重复值的数组;count<0且绝对值大于key的大小,则返回|count|个含有重复值的数组;key为空集,则返回一个空数组;key不是集合类型,则返回false;
    * php $redis->sRandMember($key1,2); /* array(2) { [0]=> string(4) "qing" [1]=> string(3) "zhu" } */ $redis->sRandMember($key1,-3); /* array(3) { [0]=> string(4) "qing" [1]=> string(3) "zhu" [2]=> string(4) "qing" } */ $redis->sRandMember($key4,-3); /* array(0) { } */ $redis->sRandMember('string1',6); /* bool(false) */
  • sIsMember(key,member),sContains(key,member)函数
    * 说明: 判断member是否存在于集合key中,两个函数的作用是一样的
    * 参数: key(集合的名称),member(需要判断的值)
    * 返回:如果member存在于集合key中,则返回true,否则返回false
    * php $redis->sIsMember($key1,'qing'); /* true */
  • sDiff(key1,key2,.....keyN)函数
    * 说明:获取多个key之间的差集并返回
    * 参数:keyN(集合的名称)
    * 返回:与key1相比较得到的差集所组成的数组
    * php $redis->sDiff($key1,$key2); /* array(2) { [0]=> string(4) "qing" [1]=> string(3) "zhu" } */
  • sDiffStore(dstKey,key1,key2, ..... keyN)函数
    * 说明:获取多个给定的集合key之间的差集并存储到集合dstKey中;如果dstKey已经存在则将其覆盖
    * 参数:dstKey(获取差集之后要存储的集合),keyN(给定的集合key)
    * 返回:执行成功则返回差集的个数;失败则返回false
    * php $redis->sDiffStore($key3,$key1,$key2); /* 2 */
  • sInter(key1,key2,.....keyN)函数
    * 说明:返回所有给定的集合key的交集所组成的数组
    * 参数:keyN(集合名称)
    * 返回:返回所有给定的集合key的交集所组成的数组,如果给定的集合中存在空集,则返回一个空数组
    * php $redis->sInter($key1,$key2); /* array(0) { } */
  • sInterStore(dstKey,key1,...,keyN)函数
    * 说明:获取所有给定的集合key的交集并存入集合dstKey中;如果dstKey已经存在,则将其覆盖。
    * 参数:dstKey(目标集合的名称),keyN(给定的集合key)
    * 返回:获取所有给定的集合key的交集并存入集合dstKey中,成功则将交集写入到dstKey中并返回交集的个数,失败则返回false;
    * php $redis->sInterStore($key3,$key1,$key2);/* int(0) */
  • sUnion(key1,...,keyN)函数
    * 说明:返回给定的多个key的交集
    * 参数:keyN(集合名称)
    * 返回:成功则返回所有集合的交集所组成的索引数组,失败则返回false
    * php $redis->sUnion($key1,$key2);/* array(3) { [0]=> string(4) "qing" [1]=> string(2) "yu" [2]=> string(3) "zhu" } */
  • sUnionStore(dstkey,key1,....,keyN)函数
    * 说明: 将给定集合的并集写入到指定的集合dstKey中;如果dstKey已经存在,则将其覆盖。
    * 参数:dstkey(指定的集合),keyN(给定的集合)
    * 返回:成功则返回dstKey中集合的个数,失败则返回false
    * php $redis->sUnionStore($key3,$key1,$key2); /* int(3) */
  • sScan(key,iterator,pattern,count)函数
    * 说明:扫描(遍历)一遍集合的成员
    * 参数:key(集合的名称),iterator(迭代器),pattern(遍历时的匹配条件),count(期望返回成员的数量)
    * 返回:执行成功返回一个数组,失败则返回false