Redis 集合(Set)
Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。
Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。
集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。
操作方法
方法列表
方法名稱 | 參數 | 說明 | 備注 |
---|---|---|---|
sAdd | $key, ...$data | 向集合添加一個或多個成員 | |
sCard | $key | 獲取集合的成員數 | |
sDiff | $key1, ...$keys | 返回給定所有集合的差集 | |
sMembers | $destination, ...$keys | 返回集合中的所有成員 | |
sDiffStore | $key1, ...$keys | 返回給定所有集合的差集并存儲在 destination 中 | |
sInter | $destination, ...$keys | 返回給定所有集合的交集 | |
sInterStore | $key, $member | 返回給定所有集合的交集并存儲在 destination 中 | |
sIsMember | $key | 判斷 member 元素是否是集合 key 的成員 | |
sMove | $source, $destination, $member | 將 member 元素從 source 集合移動到 destination 集合 | |
sPop | $key | 移除并返回集合中的一個隨機元素 | |
sRandMemBer | $key, $count = null | 返回集合中一個或多個隨機數 | |
sRem | $key, $member1, ...$members | 移除集合中一個或多個成員 | |
sUnion | $key1, ...$keys | 返回所有給定集合的并集 | |
sUnIonStore | $destination, $key1, ...$keys | 所有給定集合的并集存儲在 destination 集合中 | |
sScan | $key,&$cursor, $pattern=null, $count=null | 迭代集合中的元素 |
在集群模式中,sDiff,sDiffStore,sInter,sMove,sUnion,sUnIonStore等方法不能使用
基本使用
go(function () {
$redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
'host' => '127.0.0.1',
'port' => '6379',
'auth' => 'easyswoole',
'serialize' => \EasySwoole\Redis\Config\RedisConfig::SERIALIZE_NONE
]));
$key = [
'muster1',
'muster2',
'muster3',
'muster4',
'muster5',
];
$value = [
'1',
'2',
'3',
'4',
];
$redis->del($key[0]);
$redis->del($key[1]);
$data = $redis->sAdd($key[0], $value[0], $value[1]);
var_dump($data);
$data = $redis->sCard($key[0]);
var_dump($data);
$redis->sAdd($key[1], $value[0], $value[2]);
$data = $redis->sDiff($key[0], $key[1]);
var_dump($data);
$data = $redis->sDiff($key[1], $key[0]);
var_dump($data);
$data = $redis->sMembers($key[0]);
var_dump($data);
$data = $redis->sMembers($key[1]);
var_dump($data);
$data = $redis->sDiffStore($key[2], $key[0], $key[1]);
var_dump($data);
$data = $redis->sInter($key[0], $key[1]);
var_dump($data);
$data = $redis->sInterStore($key[3], $key[0], $key[1]);
var_dump($data);
$data = $redis->sIsMember($key[0], $value[0]);
var_dump($data);
$data = $redis->sMove($key[0], $key[1], $value[1]);
var_dump($data);
$data = $redis->sPop($key[0]);
var_dump($data);
$redis->del($key[3]);
$redis->sAdd($key[3], $value[0], $value[1], $value[2], $value[3]);
$data = $redis->sRandMemBer($key[3], 4);
var_dump($data);
$data = $redis->sRem($key[3], $value[0], $value[1], $value[2], $value[3]);
var_dump($data);
$data = $redis->sUnion($key[0], $key[1]);
var_dump($data);
$redis->del($key[1]);
$redis->del($key[2]);
$redis->del($key[3]);
$redis->del($key[4]);
$redis->sAdd($key[1], 1, 2, 3, 4);
$redis->sAdd($key[2], 5);
$redis->sAdd($key[3], 6, 7);
$data = $redis->sUnIonStore($key[4], $key[1], $key[2], $key[3]);
var_dump($data);
$cursor = 0;
$redis->del('a');
$redis->sAdd('a','a1','a2','a3','a4','a5');
$data= [];
do {
$keys = $redis->sScan('a',$cursor,'*',1);
$data = array_merge($data,$keys);
} while ($cursor);
var_dump($data);
});