thinkphp5操作set集合
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'));
结果:
int(2)
bool(true)
4.srandmember 从集合中随机返回一个或多个元素,整数返回值不重复,负数返回值可重复
redis.php封装函数
/*
* srandmember 从集合中随机返回一个或多个元素,整数返回值不重复,负数返回值可重复
*/
public function sRandMember($name,$count)
{
return $this->handler->srandmember($name,$count);
}
客户端调用:
dump($redis->sRandMember('demo','4'));
dump($redis->sRandMember('demo','-4'));
结果:
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"
}