文章目录

  • 前言
  • 方案分析
  • 具体逻辑
  • 可能会踩的坑
  • 加锁的具体逻辑
    • 使用redis的set来进行加锁操作。同时设置过期时间
  • 总结

前言

我们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。

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

  1. [最后召集:西瓜糖、editasp]微软MVP呕心力作《我的第一本C++书》新鲜出炉,围观即有机会获新书免费送...

    最后召集: 西瓜糖.editasp 你们还没有将你的邮寄地址发给我,请抽时间将你们的邮寄地址发给我,我将书寄给你们.抓紧哦 如果下周你们还没有将地址给我,我不得不遗憾地认为你们弃权了. "伟 ...

  2. 使用Beetle简单构建高性能Socket tpc应用

    使用Beetle简单构建高性能Socket tpc应用 c 使用Beetle简单构建高性能Socket tpc应用 您的评价:        收藏该经验 beetle是基于c#编写的高性能Socket ...

  3. 点赞模块设计:Redis缓存 + 定时写入数据库实现高性能点赞功能

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:solocoder juejin.im/post/5bdc2 ...

  4. 点赞模块设计 - Redis缓存 + 定时写入数据库实现高性能点赞功能

    源码地址:github.com/cachecats/c- 点赞是作为整个系统的一个小模块,代码在 user-service 用户服务下. 本文基于 SpringCloud, 用户发起点赞.取消点赞后先 ...

  5. 使用Beetle简单构建高性能Socket tcp应用

    beetle是基于c#编写的高性能Socket tcp组件,它基于SocketAsyncEventArgs的实现并提供了发送队列和接收队列的支持,可以根据情况灵活地设置1-N个发送队列和接收队列.除了 ...

  6. 超级简单小程序点赞功能

    本人也是在开发中看了很多同学的点赞功能,但是代码量太多,于是我写也了一个,代码如下,有需要的拿走. 第一步 bbs_list:function(){var page = this;app.reques ...

  7. 微信小程序基于云数据库简单实现帖子点赞功能。

    思路: 1·用云函数或者app.js获取用户openid,在每个帖子里面like_people数组里添加点赞过该帖子的用户openid.获取帖子云数据存放到suju:[]里. 2·点击点赞按钮图标变换 ...

  8. Android简单、高性能的高斯模糊(毛玻璃)效果(附源码)

    毛玻璃效果相信很多朋友都眼红很久了, 隔壁ios系统对高斯模糊早就大范围使用了, 咱们Android却丝毫不为所动, 于是就只能靠广大开发者咯. 这是目前市面上性能最高的方案, 也不知道最初是哪位大神 ...

  9. 车载网络技术详解 —— 车载网络系统基础(✨您绝不可错过的呕心力作✨)

    一.车载网络系统概述 1.线束连接方式对比 传统线束连接方式 -- 点对点连接 特点: 布线复杂,占用空间大,从而限制功能的拓展 故障率增加,降低汽车的可靠性,故障率增高且排查难度加大 大量的数据传输 ...

最新文章

  1. linux命令2--cd和pwd
  2. 2021年春季学期-信号与系统-第十次作业参考答案-第二小题
  3. java 显式锁_Java 实现一个自己的显式锁Lock(有超时功能)
  4. matlab 级联cic,Matlab中CIC滤波器的应用
  5. 学python需要英语基础吗-学python需要英语基础吗
  6. priority_queue
  7. Homebrew是什么?怎么关闭自动更新?
  8. 第十章:禁丹药,禁符纸
  9. epub 阅读器_全球与中国EPUB阅读器市场深度调研分析报告
  10. java12 - 7 排序的案例
  11. 对LuaJIT制作的游戏的简单修改(转载)
  12. POJ刷题顺序(转载)
  13. Java发送短信验证码
  14. 2023我的秋招之路(1)7.21NJ银行金融科技岗提前批笔试
  15. 腾讯云技术认证考试综述 腾讯云技术认证题库
  16. matlab矩阵左右翻转例子
  17. Model-Agnostic Meta-Learning (MAML) 理解
  18. LTE网络-EPC(分组核心网)
  19. iOS 图标适配官网
  20. UVM-TLM机制解读

热门文章

  1. 使用SSM框架上传图片
  2. 抽象之美——万物皆可设计
  3. 哪些发明可以申请专利?
  4. forEach()用法 (个人理解讲解)
  5. 弃用基于帧的视觉感知,奔驰/博世/Mobileye瞄准新方向
  6. 简单介绍一下qsort函数
  7. 阿里云国际站代理商:阿里云是干什么的?阿里云app和建网站有什么关系?
  8. 8、Java网络编程——MINA框架
  9. 免费课程-作业 误入这个论坛
  10. 硬盘基本知识(磁头、磁道、扇区、柱面