六祭犯、redis 集合(Set)操作
Redis Set 是 String 類型的無(wú)序集合墓懂,集合成員是唯一的。
它是能過哈希表實(shí)現(xiàn)的七蜘,所以添加谭溉,刪除,查找的復(fù)雜度都是 O(1) 橡卤。
集合中最大的成員數(shù) 2的32次方-1 個(gè)(每個(gè)集合可存儲(chǔ)40多億個(gè)成員)
1. sAdd - 向集合添加一個(gè)或多個(gè)成員
// 成功返回添加元素個(gè)數(shù)扮念,失敗時(shí)返回0
$redis->sAdd('set', 'v1', 'v2', 'v3');
2. sCard - 獲取集合的成員數(shù)
// 成功時(shí)返回集合成員個(gè)數(shù),當(dāng)集合不存在時(shí)返回0
$redis->sCard('set');
3. sDiff - 返回第一個(gè)集合與其他集合之間的差異
$redis->sAdd('setB', 'v3','v4','v5');
$redis->sDiff('set', 'setB');
/* 輸出
array(2) {
[0]=>
string(2) "v2"
[1]=>
string(2) "v1"
}
*/
4. sDiffStore - 返回給定所有集合的差集并存儲(chǔ)在 destination 中
// 成功時(shí)返回差集中成員個(gè)數(shù)碧库,失敗時(shí)返回0;
// destination 中存儲(chǔ)的是 set 與其他集合對(duì)比的差集
$redis->sDiffStore('destination', 'set', 'setB');
/* 輸出 destination
array(2) {
[0]=>
string(2) "v2"
[1]=>
string(2) "v1"
}
*/
5. sInter - 返回給定集合的交集
// 成功時(shí)返回包含交集成員的數(shù)組柜与,失敗時(shí)返回空數(shù)組
$redis->sInter('set', 'setB');
/* 輸出:
array(1) {
[0]=>
string(2) "v3"
}
*/
6. sInterStore - 返回給定所有集合的交集并存儲(chǔ)在 destination 中
// 返回交集中成員的個(gè)數(shù)
$redis->sInterStore('destination', 'set', 'setB');
7. sIsMember - 判斷元素是否是集合 key 的成員
// 成功時(shí)返回 true; 失敗時(shí)返回 false
$redis->sIsMember('set', 'v8');
8. sMembers - 返回集合中的所有成員
// 成功時(shí)以數(shù)組形式輸出集合的成員;集合不存在時(shí)返回 NULL
$redis->sMembers('set');
/* 輸出
array(3) {
[0]=>
string(2) "v1"
[1]=>
string(2) "v2"
[2]=>
string(2) "v3"
}
*/
9. sMembers - 將元素從一個(gè)集合移動(dòng)到另一個(gè)集合
$redis->sAdd('key1', 'set11');
$redis->sAdd('key1', 'set12');
$redis->sAdd('key1', 'set13');
$redis->sAdd('key2', 'set21');
$redis->sAdd('key2', 'set22');
// 將元素 set13 從集合 key1 移動(dòng)到集合 key2
$redis->sMove('key1', 'key2', 'set13');
$key1 = $redis->sMembers('key1');
var_dump($key1);
/* 輸出
array(2) {
[0]=>
string(5) "set11"
[1]=>
string(5) "set12"
}
*/
$key2 = $redis->sMembers('key2');
var_dump($key2);
/* 輸出
array(3) {
[0]=>
string(5) "set22"
[1]=>
string(5) "set13"
[2]=>
string(5) "set21"
}
*/
10. sPop - 移除并返回集合中的一個(gè)隨機(jī)元素
// 成功時(shí)返回元素谈为; 失敗時(shí)返回 false
$redis->sPop('key1');
11. sRandMember - 返回集合中一個(gè)或多個(gè)隨機(jī)數(shù)
// 成功時(shí)返回?cái)?shù)組;失敗時(shí)返回空數(shù)組踢关; 如果第二個(gè)參數(shù)不傳遞伞鲫,返回一個(gè)字符串類型的元素值
$redis->sRandMember('key1', 2);
12. sUnion - 返回所有給定集合的并集
// 返回?cái)?shù)組
$redis->sUnion('set', 'setB');
13. sUnionStore - 所有給定集合的并集存儲(chǔ)在 destination 集合中
// 返回并集中元素的個(gè)數(shù);
$redis->sUnionStore('destination', 'key3', 'key4');
14. sscan - 用于迭代集合鍵中的元素
$redis->sAdd('set', 'A');
$redis->sAdd('set', 'B');
$redis->sAdd('set', 'C');
$redis->sAdd('set', 'D');
$iterator = null;
while ($members = $redis->sScan('set', $iterator)){
foreach ($members as $member){
echo $member . PHP_EOL;
}
}
// 輸出
/*
D
B
C
A
*/