redis 五大类型之一set集合,set和list的区别set没有重复值
基本命令:
sadd 将一个元素添加到集合里,返回被添加元素当中原本并不存在于集合的元素数量
srem 从集合里删除一个活多个元素,返回被删除元素数量
sissmember 检查元素item是否在集合中
scard 返回集合中的数量
smembers 返回集合中所有元素
spop 随机移除一个元素
smove 如果a集合有a值,把a值已给b集合。
sdiff 差集运算,返回那些存在于第一个集合,但不存在于其它集合中的元素
sdiffstore 将存在第一个集合单不存在其他集合的元素存储到 新集合中
sinter 交集运算,返回那些同时存在与所有几何的元素
sinterstore
sunion 返回那些至少存在于一个集合的元素
sunionstore
srandmember 随机从集合中返回指定个数,count为整数不能重复,负数可以重复返回

tp里操作set集合

sadd,redis中add方法为一个元素一个元素添加。cache/driver/redis.php里扩展函数,可以多值一起添加

	 /*
 * 添加元素
 */
public function sAdd($name,$value)
{
    $num = 0;
    foreach ($value as $row){
       $num+= $this->handler->sadd($name,$row);
    }
    return $num;
}
/*
 * 查看元素
 */
public function sMembers($name)
{

return $this->handler->smembers($name);

}


客户端调用

		 echo $redis->sadd('demo',['a','b','c']);
   		 dump($redis->smembers('demo'));
 结果:
 
  array(3) {
  [0] => string(1) "c"
 [1] => string(1) "a"
 [2] => string(1) "b"
}

2.删除元素

 /*
 * srem 删除元素//多元素删除
 */
public function sRem($name,$value)
{
    $num = 0;
    if(is_array($value)){
        foreach ($value as $row){
            $num+= $this->handler->srem($name,$row);
        }
        return $num;
    }else{
        return $this->handler->srem($name,$value);
    }

}

客户端调用

$redis->srem('demo',['b','ccc']);

dump($redis->smembers('demo'));
结果:
array(2) {
 [0] => string(1) "a"
 [1] => string(1) "c"
}

3.查看集合中多少个元素,查看元素是否在集合中
服务端封装
/*
 * sismember 查看元素是否在集合中
 */
public function sIsMember($name,$value)
{
    return $this->handler->sismember($name,$value);
}

 /*
 * scard查看元素个数
 */
public function sCard($name)
{
    return $this->handler->scard($name);
}

客户端调用:

	dump($redis->scard('demo'));
  	dump($redis->sismember('demo','c'));   

结果:

array(3) {
 [0] => string(1) "c"
 [1] => string(3) "ccc"
  [2] => string(2) "cc"
}
array(4) {
  [0] => string(1) "c"
  [1] => string(2) "cc"
[2] => string(3) "ccc"
  [3] => string(2) "cc"
}

5.spop 随机删除一个元素,返回被删除的元素
客户端调用
  dump($redis->spop('demo'));

结果:

string(1) "a"

6.smove 如果a集合有a值,把a值已给b集合。
redis.php封装函数
	 /*
 * smove 如果a集合有a值,把a值已给b集合。
 */
public function sMove($name,$new,$value)
{
    return $this->handler->smove($name,$new,$value);
}
客户端调用
    dump($redis->sMembers('demo'));
    dump($redis->sMove('demo','demo2','cc2'));
    dump($redis->sMembers('demo'));
    dump($redis->sMembers('demo2'));
结果:
array(5) {
  [0] => string(3) "cc2"
 [1] => string(3) "cc1"
 [2] => string(3) "ccc"
 [3] => string(1) "c"
 [4] => string(2) "cc"
}
bool(true)
array(4) {
  [0] => string(3) "cc1"
  [1] => string(3) "ccc"
  [2] => string(1) "c"
  [3] => string(2) "cc"
}
array(1) {
  [0] => string(3) "cc2"
}
7.sdiff 差集运算,返回那些存在于第一个集合,但不存在于其它集合中的元素
客户端调用:

	 dump($redis->sMembers('demo'));
     dump($redis->sMembers('demo2'));
     dump($redis->handler()->sdiff('demo','demo2'));
结果
array(4) {
  [0] => string(3) "cc1"
  [1] => string(3) "ccc"
  [2] => string(1) "c"
  [3] => string(2) "cc"
}
array(2) {
  [0] => string(3) "cc2"
  [1] => string(2) "cc"
}
array(3) {
  [0] => string(1) "c"
  [1] => string(3) "ccc"
  [2] => string(3) "cc1"
}

8.sdiffstore 差集运算。返回存在于第一个集合,但不存在第二个集合的元素存储到新的集合中
sinterstore交集运算。返回同时存在所有集合的元素存储到新的集合中
sunionstore并集运算。返回集合中至少出现一次的元素存储到新的集合中
客户端调用
    dump($redis->sMembers('demo'));
    dump($redis->sMembers('demo2'));
    dump($redis->handler()->sdiffstore('new','demo','demo2'));
    dump($redis->handler()->sinterstore('new1','demo','demo2'));
    dump($redis->handler()->sunionstore('new2','demo','demo2'));
    dump($redis->sMembers('new'));
    dump($redis->sMembers('new1'));
    dump($redis->sMembers('new2'));

结果

array(4) {
  [0] => string(3) "cc1"
  [1] => string(3) "ccc"
  [2] => string(1) "c"
  [3] => string(2) "cc"
}
array(2) {
  [0] => string(3) "cc2"
  [1] => string(2) "cc"
}
int(3)
int(1)
int(5)
array(3) {
  [0] => string(1) "c"
  [1] => string(3) "ccc"
  [2] => string(3) "cc1"
}
array(1) {
  [0] => string(2) "cc"
}
array(5) {
  [0] => string(3) "cc1"
  [1] => string(2) "cc"
  [2] => string(3) "cc2"
  [3] => string(3) "ccc"
  [4] => string(1) "c"
}