共计 2058 个字符,预计需要花费 6 分钟才能阅读完成。
Set(集合)
Set 是 String 类型的无序集合,成员唯一,不会出现重复的数据。Set 最多可以包含 232 – 1 个元素(40 多亿)。
应用场景
统计访问 IP
可以用来记录访问的 IP,Set 有成员唯一性,所以不用担心 重复记录。
联系人、粉丝列表
记录用户的联系人、粉丝列表或者关注列表,利用 Set 的交集可以得到不同用户的共同关注、共同联系人等。
实例
<?php
include ‘redis.php’;
$redis = getRedis();
$redisKey = ‘name_set’;
$redisKey1 = ‘name_set1’;
$redisKey2 = ‘team_set’;
$redisKey3 = ‘team_set1’;
$redis->sAdd($redisKey, ‘kobe’);// 向 set 中添加成员
print_r($redis->sMembers($redisKey));// 获取 set 中的所有成员 Array ([0] => kobe )
echo ‘<br />’;
var_dump($redis->sAdd($redisKey, ‘kobe’));// 因为 set 具有成员唯一性,所以这个添加不成功 int(0)
echo ‘<br />’;
$redis->sAdd($redisKey, ‘Gasol’);
echo $redis->sCard($redisKey) . ‘<br />’;// 获取 set 中的成员数 2
var_dump($redis->sIsMember($redisKey, ‘kobe’));// 当前值是否存在 bool(true)
echo ‘<br />’;
$redis->sAdd($redisKey1, ‘kobe’, ‘fisher’, ‘iverson’);// Array ([0] => iverson [1] => kobe [2] => fisher )
echo $redis->sPop($redisKey1) . ‘<br />’;// 获取并移除一个随机元素 iverson
print_r($redis->sInter($redisKey, $redisKey1));// 获取指定 set 的交集 Array ([0] => kobe )
echo ‘<br />’;
print_r($redis->sDiff($redisKey, $redisKey1));// 获取指定 set 的差集 Array ([0] => Gasol )
echo ‘<br />’;
echo $redis->sRandMember($redisKey) . ‘<br />’;// 获取指定数量的随机数,默认为 1 个 Gasol
var_dump($redis->sRem($redisKey1, ‘kobe’));// 删除指定值
echo ‘<br />’;
$redis->sAdd($redisKey2, ‘Lakers’, ‘Spurs’, ‘Warriors’, ‘Rockets’);
$redis->sAdd($redisKey3, ‘Celtics’, ‘Bulls’, ’76ers’, ‘Warriors’, ‘Rockets’);
$redis->sInterStore(‘temp’, $redisKey2, $redisKey3);// 获取指定 set 的交集,并将结果存储在自定义 set 中
print_r($redis->sMembers(‘temp’));// Array ([0] => Rockets [1] => Warriors )
echo ‘<br />’;
$redis->sDiffStore(‘temp1’, $redisKey2, $redisKey3);// 获取指定 set 的差集,并将结果存储在自定义 set 中
print_r($redis->sMembers(‘temp1’));// Array ([0] => Lakers [1] => Spurs )
echo ‘<br />’;
$redis->sMove(‘temp’, ‘temp1’, ‘Rockets’);// 将指定值,从 temp 中移动到 temp1 中
print_r($redis->sMembers(‘temp1’));// Array ([0] => Lakers [1] => Spurs )
echo ‘<br />’;
print_r($redis->sUnion($redisKey2, $redisKey3));// 获取指定 set 的并集 Array ([0] => Lakers [1] => Warriors [2] => Bulls [3] => Spurs [4] => 76ers [5] => Celtics [6] => Rockets )
echo ‘<br />’;
$redis->sUnionStore(‘temp2’, $redisKey2, $redisKey3);// 获取指定 set 的并集,并将结果存储在自定义 set 中
print_r($redis->sMembers(‘temp2’));// Array ([0] => Lakers [1] => Warriors [2] => Bulls [3] => Spurs [4] => 76ers [5] => Celtics [6] => Rockets )
参考资料:菜鸟教程。