集合篇

Redis集合(Sets)数据结构可存储一组唯一的成员。利用集合你可以添加、获取或删除成员,检查成员资格,或检索随机成员。利用排序算法,你还可以执行集合操作,如交集、联合和集合差,并计算集合的万有引力。

redis-sets

场景

集合的场景一般都是配合其它的功能实现一起出现。比如好友关系,共同好友,用户兴趣爱好等等。

标签系统

在内容管理系统或电子商务平台中,可以使用集合来实现标签系统,每个对象对应一个集合,集合中存储了该对象的标签,可以方便地对对象进行标签检索和分类。


$redis->sAdd('goods:1', '性价比超低', '值得入手');
// 获取全部标签
$redis->sMembers('goods:1');

用户兴趣爱好

可以使用集合来存储用户的兴趣爱好,每个用户对应一个集合,集合中存储了用户感兴趣的内容或话题,可以用于个性化推荐和内容过滤。

// 获取用户兴趣爱好
$redis->sMembers('user:1:in');

好友关系

在社交网络应用中,可以使用集合来表示用户的好友关系,每个用户对应一个集合,集合中存储了用户的好友列表,可以方便地进行好友关系的管理和查询。

// 获取用户好友 
$redis->sMembers('user:1:friends');

共同关注

在社交网络应用中,可以使用集合来表示用户之间的共同关注关系,例如通过交集操作来查找两个用户共同关注的好友或内容。

// 获取这三个用户的共同好友
$redis->sInter('user:1:friends', 'user:2:friends', 'user:3:friends');

集合运算

Redis提供了丰富的集合运算操作,包括并集、交集、差集等,可以方便地对集合进行合并、筛选和比较操作。


// 返回差集
$redis->sDiff('user:1:friends', 'user:2:friends', 'user:3:friends');
// 交集共同部分
$redis->sInter('user:1:friends', 'user:2:friends', 'user:3:friends')
// 合并去重
$redis->sUnion('user:1:friends', 'user:2:friends', 'user:3:friends')

唯一性检查

由于集合中的元素是不重复的,可以使用集合来实现数据的唯一性检查,例如检查用户提交的表单数据中是否有重复的项。

投票系统

可以使用集合来实现投票系统,每个投票对应一个集合,集合中存储了参与投票的用户,可以通过集合的基数操作来统计投票数和去重。

// 投票的用户
$redis->sAdd('vote:1', '用户:1', '用户:2');
// 投票数
$redis->sSize('vote:1')

在线用户统计

可以使用集合来存储在线用户的ID,通过集合的基数操作可以实时统计在线用户数和检查用户是否在线。


if ($redis->sIsMember('online', '用户:1')) {
    // todo
}

协作

如果你有更多的场景使用用例,可以通过github提交pr请求。有问题可以开issue编辑此页面