如何简单实现高性能点赞?【呕心力作】


前言

我们APP上有社交模块,就涉及到点赞,关注操作。我们如何做到点赞操作,关注操作,能够实时的反馈呢?


方案分析

如果想要高性能,那么我们肯定是不能直接去操作数据库的。因为在APP中,这种互动操作会特别的频繁。如果直接写库的话会直接干崩溃数据库的。所以对于这些操作我们是直接操作Redis。这样才能保证实时性得到解决。但是也有需要解决的实际问题。如何保证双写一致?以及是否考虑定时刷盘的方式来刷入数据库

具体逻辑

对于用户的获赞,关注量,粉丝量 我们使用redis hash来进行存储。

  1. 个人中心流程图
    参考文档
    2 点赞 关注操作流程图
    在这里插入图片描述

可能会踩的坑

  • 因为采用的策略是没有初始化的用户才会去初始化操作。如果在初始化操作的时候,假如来了很多的并发请求。就会出现同步Redis出现脏读的情况。

    比如说。我们初始化时 A关注B C同一时刻也关注B。B还没有进行初始化操作。那么A操作时拿到的B粉丝量是0, 后面C拿到B的粉丝量也是0,然后这时候就会被初始化两次。导致出现数据不一致的情况。那我们在初始化的时候,可以对操作进行加锁操作。初始化过程中,如果有出现并发的情况。没拿到锁的话直接废弃掉改请求。保证数据的一致(当然,这种逻辑操作要根据业务类型来具体实现逻辑。

加锁的具体逻辑

使用redis的set来进行加锁操作。同时设置过期时间

public function setLock(string $key, $value, int $ttl = self::EXPIRE_TTL)
    {
        return self::$connection->set(self::getCacheKey($key), $value, 'EX', $ttl, 'NX');
    }

总结

实现具体的逻辑有不同的方案,具体选择的方案需要根据业务实际情况来进行考虑。我们目前点赞,关注并发情况不是很高。所以能够一个个初始化进行操作。如果并发量很高的话,前面的方案可能会直接冲爆mysql。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员若风+

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

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

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

打赏作者

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

抵扣说明:

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

余额充值