redis之set 集合命令详解

6 篇文章 0 订阅

集合 set 相关命令

集合的性质: 唯一性,无序性,确定性
注: 在string和link的命令中,可以通过range 来访问string中的某几个字符或某几个元素
但,因为集合的无序性,无法通过下标或范围来访问部分元素.
因此想看元素,要么随机先一个,要么全选

sadd key value1 value2

作用: 往集合key中增加元素
<?php
$redis->sAdd('k', 'v1');// int(1)
$redis->sAdd('k', 'v1', 'v2', 'v3');// int(2)
srem value1 value2

作用: 删除集合中集为 value1 value2的元素
返回值: 忽略不存在的元素后,真正删除掉的元素的个数

<?php
var_dump( $redis->sAdd('k', 'v1', 'v2', 'v3') );// int(3)
var_dump( $redis->sRem('k', 'v2', 'v3') );// int(2)
var_dump( $redis->sMembers('k') ); // array(1) {[0]=> string(2) "v1"}
spop key

作用: 返回并删除集合中key中1个随机元素

随机–体现了无序性

<?php
$redis->sAdd('key1' , 'set1');
$redis->sAdd('key1' , 'set2');
$redis->sAdd('key1' , 'set3');// 'key1' => {'set3', 'set1', 'set2'}

$redis->sPop('key1');// 'set1', 'key1' => {'set3', 'set2'}
$redis->sPop('key1');// 'set3', 'key1' => {'set2'}
srandmember key

作用: 返回集合key中,随机的1个元素.

<?php
$redis->sAdd('key1' , 'set1');
$redis->sAdd('key1' , 'set2');
$redis->sAdd('key1' , 'set3');// 'key1' => {'set3', 'set1', 'set2'}

$redis->sRandMember('key1');// 'set1', 'key1' => {'set3', 'set1', 'set2'}
$redis->sRandMember('key1');// 'set3', 'key1' => {'set3', 'set1', 'set2'}
sismember key value

作用: 判断value是否在key集合中
是返回1,否返回0

<?php
$redis->sAdd('key1' , 'set1');
$redis->sAdd('key1' , 'set2');
$redis->sAdd('key1' , 'set3');//'key1' => {'set1', 'set2', 'set3'}

$redis->sIsMember('key1', 'set1');//TRUE
$redis->sIsMember('key1', 'setX');//FALSE
smembers key

作用: 返回集中中所有的元素

<?php
$redis->delete('s');
$redis->sAdd('s', 'a');
$redis->sAdd('s', 'b');
$redis->sAdd('s', 'a');
$redis->sAdd('s', 'c');

var_dump($redis->sMembers('s'));//array(3) {[0]=>string(1) "c" [1]=>string(1) "a" [2]=>string(1) "b"}
//集合顺序是随机的,对应于Redis本身内部的结构表征。
scard key

作用: 返回集合中元素的个数

<?php
$redis->sAdd('key1' , 'set1');
$redis->sAdd('key1' , 'set2');
$redis->sAdd('key1' , 'set3');// 'key1' => {'set1', 'set2', 'set3'}
$redis->sCard('key1');// 3
$redis->sCard('keyX');// 0
smove source dest value

作用:把source中的value删除,并添加到dest集合中

<?php
$redis->sAdd('key1' , 'set11');
$redis->sAdd('key1' , 'set12');
$redis->sAdd('key1' , 'set13');// 'key1' => {'set11', 'set12', 'set13'}

$redis->sAdd('key2' , 'set21');
$redis->sAdd('key2' , 'set22');// 'key2' => {'set21', 'set22'}

$redis->sMove('key1', 'key2', 'set13');
// 'key1' =>  {'set11', 'set12'}
// 'key2' =>  {'set21', 'set22', 'set13'}
sinter key1 key2 key3

作用: 求出key1 key2 key3 三个集合中的交集,并返回

redis 127.0.0.1:6379> sadd s1 0 2 4 6
(integer) 4
redis 127.0.0.1:6379> sadd s2 1 2 3 4
(integer) 4
redis 127.0.0.1:6379> sadd s3 4 8 9 12
(integer) 4
redis 127.0.0.1:6379> sinter s1 s2 s3
1) "4"
redis 127.0.0.1:6379> sinter s3 s1 s2
1)"4"
<?php
$redis->sAdd('key1', 'val1');
$redis->sAdd('key1', 'val2');
$redis->sAdd('key1', 'val3');
$redis->sAdd('key1', 'val4');

$redis->sAdd('key2', 'val3');
$redis->sAdd('key2', 'val4');

$redis->sAdd('key3', 'val3');
$redis->sAdd('key3', 'val4');

var_dump($redis->sInter('key1', 'key2', 'key3'));
//array(2) {[0]=>string(4) "val4" [1]=>string(4) "val3"}
sinterstore dest key1 key2 key3

作用: 求出key1 key2 key3 三个集合中的交集,并赋给dest

<?php
$redis->sAdd('key1', 'val1');
$redis->sAdd('key1', 'val2');
$redis->sAdd('key1', 'val3');
$redis->sAdd('key1', 'val4');

$redis->sAdd('key2', 'val3');
$redis->sAdd('key2', 'val4');

$redis->sAdd('key3', 'val3');
$redis->sAdd('key3', 'val4');

var_dump($redis->sInterStore('dest', 'key1', 'key2', 'key3'));//int(2)
var_dump($redis->sMembers('dest'));
//array(2) {[0]=>string(4) "val4" [1]=>string(4) "val3"}
sunion key1 key2.. Keyn

作用: 求出key1 key2 keyn的并集,并返回

<?php
$redis->sAdd('s0', '1');
$redis->sAdd('s0', '2');
$redis->sAdd('s1', '3');
$redis->sAdd('s1', '1');
$redis->sAdd('s2', '3');
$redis->sAdd('s2', '4');

var_dump($redis->sUnion('s0', 's1', 's2'));
//array(4) { [0]=> string(1) "3" [1]=> string(1) "4" [2]=> string(1) "1" [3]=> string(1) "2"}
sdiff key1 key2 key3

作用: 求出key1与key2 key3的差集
即key1-key2-key3

<?php
$redis->delete('s0', 's1', 's2');

$redis->sAdd('key1'1');
$redis->sAdd('key1'2');
$redis->sAdd('key1'3');
$redis->sAdd('key1'4');

$redis->sAdd('key2', '1');
$redis->sAdd('key3', '3');

var_dump($redis->sDiff('key1', 'key2', 'key3'));
//array(2) {[0]=> string(1) "4" [1]=> string(1) "2"}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值