基于Redis的Set实现共同好友微关系

本文介绍了基于Redis的Set数据结构实现共同好友的功能。通过使用sinter交集命令找到关羽和张飞共同关注的人,避免高并发场景下SQL的in和not in操作导致的性能问题。还提及了sismember用于判断用户是否为好友,以及scard获取好友数量的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于Redis的Set实现共同好友微关系

1、概述

使用redis的set集合实现共同好友

在开发中,我们可能需要计算出关羽和张飞共同关注的人有哪些?也就是关注关羽的人和关注张飞的人。我们如何通过计算把两个人的关注相同的人找出来。如果我们使用SQL如何进行编写呢?

比如:关羽关注了10个人,张飞关注了50个人,怎么计算两个人共同关注了那些人。

  • SQL

    一般采用in或者not in来实现,但是对于高并发的情况下in和not in是不可取的,就算优化使用了索引,性能也会很差。

  • 一般解决方案:Redis

    Redis的set集合数据结构,非常适合的存储好友、关注、粉丝和感兴趣的人的集合。

1、sinter交集命令:获得A和B两个用户共同的好友

sinter A B --- 1

2、sismember命令:可以判断某个用户是B的好友。
3、scard命令:可以获取好友的数量。

02、具体实现

需求:

把关羽的关注列表和张飞的关注列表:

关羽的关注列表:followee:user:2

张飞的关注列表:followee:user:3

sinter followee:user:2 followee:user:3
package com.example.controller;

import com.example.entity.User;
import com.example.service.FollowerService
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南宫拾壹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值