请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

粉丝关注作者与取消关注作者的功能补充

老师:你好。就是我这边在做关注与取消关注功能的时候,感觉在新增关注数据,或者取消关注,删除关注数据的时候,最好在执行功能之前,优先再使用一下isMeFollowThisWriter()这个方法,先判别一下writerId与fanId之间,是否已经存在粉丝与作者直接的关联关系后,再进行后续的功能逻辑,更好一些。

具体的代码如下:

@Override
@Transactional
public void follow(String writerId, String fanId) {
    // 首先,判断是否已经存在粉丝关注关系
    if (isMeFollowThisWriter(writerId, fanId)) {
        return;
    }

    String fanPkId = sid.nextShort();

    Fans fan = new Fans();
    fan.setId(fanPkId);
    fan.setWriterId(writerId);
    fan.setFanId(fanId);

    AppUser fanInfo = userService.getUser(fanId);
    fan.setFace(fanInfo.getFace());
    fan.setFanNickname(fanInfo.getNickname());
    fan.setSex(fanInfo.getSex());
    fan.setProvince(fanInfo.getProvince());
    // 数据库操作新增
    fansMapper.insert(fan);

    // 粉丝数更新
    redis.increment(REDIS_WRITER_FANS_COUNTS + ":" + writerId, 1);

    // 关注数更新
    redis.increment(REDIS_MY_FOLLOW_COUNTS + ":" + fanId, 1);
}

@Override
@Transactional
public void unFollow(String writerId, String fanId) {
    // 首先,判断是否已经存在粉丝关注关系
    if (!isMeFollowThisWriter(writerId, fanId)) {
        return;
    }

    Fans fan = new Fans();
    fan.setWriterId(writerId);
    fan.setFanId(fanId);

    // 数据库操作删除
    fansMapper.delete(fan);

    // 粉丝数更新
    redis.decrement(REDIS_WRITER_FANS_COUNTS + ":" + writerId, 1);

    // 关注数更新
    redis.decrement(REDIS_MY_FOLLOW_COUNTS + ":" + fanId, 1);
}

因为实际操作的时候呢,可能存在同一个作者主页的页面,在多个端,多个浏览器,或者同一个浏览器的多个页签页面上同时打开的情形,那么就会存在页面静置的情况,我这边在测试的时候,就是将同一个作者主页页面,打开了3份,然后,逐一做了3遍添加关注和取消关注的操作。就发现,如果不在关注和取消关注的接口逻辑中,优先查一下writerId与fanId是否已经存在关注的关联关系的话,直接操作DB和Redis的数据更新,可能就会导致粉丝与作者的关注关系数据记录,粉丝数与关注数的重复增加,以及删减的时候呢,会重复扣减关注数与粉丝数,把关注数与粉丝数都扣减到一个负数值。但是,我也在想另外一个方面的问题,就是关注和取消关注一般也是流量比较高的接口,如果每次都在操作关注与取消关注之前,还得通过DB查询一遍粉丝和作者的关注关系,好像这个压力也挺大的。所以,想问一下,对于这块,老师这边还有什么建议么?

正在回答

1回答

当然可以啊,可以根据自己的情况适当改写代码优化哈

1 回复 有任何疑惑可以回复我~
  • 提问者 慕勒3498910 #1
    嗯,谢谢老师。按照我的想法改呢,确实可以解决目前的问题现象了。但是,也给到关注和取消关注这2个接口更大的数据库查询压力了,遇到大家频繁地点击"关注"与"取消关注"按钮的话,感觉对数据库压力很大,在后续的升级课程后,这块的粉丝与作者的关联关系数据会保存到ES中,是吧?是不是也是一种对DB解压的方案呢?
    回复 有任何疑惑可以回复我~ 2023-01-25 15:34:37
  • 嗯,当然可以。可以扩展的。没问题。另外建议可以言简意赅一些哈,文字有点多哈哈哈😁
    回复 有任何疑惑可以回复我~ 2023-01-25 15:49:22
  • 提问者 慕勒3498910 回复 风间影月 #3
    好的,答案和建议均收到。之前,就是感觉问题内容写得太简单,担心大家看到了问题,也不知道我具体是想问的什么点。嗯,我也随着课程学习的深入,不断提高自己各方面的能力,包括问题沟通能力哈,谢谢老师。
    回复 有任何疑惑可以回复我~ 2023-01-25 15:56:11
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信