如何简单实现高性能点赞?【呕心力作】
文章目录
- 前言
- 方案分析
- 具体逻辑
- 可能会踩的坑
- 加锁的具体逻辑
- 使用redis的set来进行加锁操作。同时设置过期时间
- 总结
前言
我们APP上有社交模块,就涉及到点赞,关注操作。我们如何做到点赞操作,关注操作,能够实时的反馈呢?
方案分析
如果想要高性能,那么我们肯定是不能直接去操作数据库的。因为在APP中,这种互动操作会特别的频繁。如果直接写库的话会直接干崩溃数据库的。所以对于这些操作我们是直接操作Redis。这样才能保证实时性得到解决。但是也有需要解决的实际问题。如何保证双写一致?以及是否考虑定时刷盘的方式来刷入数据库
具体逻辑
对于用户的获赞,关注量,粉丝量 我们使用redis hash来进行存储。
- 个人中心流程图
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。
如何简单实现高性能点赞?【呕心力作】相关推荐
- [最后召集:西瓜糖、editasp]微软MVP呕心力作《我的第一本C++书》新鲜出炉,围观即有机会获新书免费送...
最后召集: 西瓜糖.editasp 你们还没有将你的邮寄地址发给我,请抽时间将你们的邮寄地址发给我,我将书寄给你们.抓紧哦 如果下周你们还没有将地址给我,我不得不遗憾地认为你们弃权了. "伟 ...
- 使用Beetle简单构建高性能Socket tpc应用
使用Beetle简单构建高性能Socket tpc应用 c 使用Beetle简单构建高性能Socket tpc应用 您的评价: 收藏该经验 beetle是基于c#编写的高性能Socket ...
- 点赞模块设计:Redis缓存 + 定时写入数据库实现高性能点赞功能
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:solocoder juejin.im/post/5bdc2 ...
- 点赞模块设计 - Redis缓存 + 定时写入数据库实现高性能点赞功能
源码地址:github.com/cachecats/c- 点赞是作为整个系统的一个小模块,代码在 user-service 用户服务下. 本文基于 SpringCloud, 用户发起点赞.取消点赞后先 ...
- 使用Beetle简单构建高性能Socket tcp应用
beetle是基于c#编写的高性能Socket tcp组件,它基于SocketAsyncEventArgs的实现并提供了发送队列和接收队列的支持,可以根据情况灵活地设置1-N个发送队列和接收队列.除了 ...
- 超级简单小程序点赞功能
本人也是在开发中看了很多同学的点赞功能,但是代码量太多,于是我写也了一个,代码如下,有需要的拿走. 第一步 bbs_list:function(){var page = this;app.reques ...
- 微信小程序基于云数据库简单实现帖子点赞功能。
思路: 1·用云函数或者app.js获取用户openid,在每个帖子里面like_people数组里添加点赞过该帖子的用户openid.获取帖子云数据存放到suju:[]里. 2·点击点赞按钮图标变换 ...
- Android简单、高性能的高斯模糊(毛玻璃)效果(附源码)
毛玻璃效果相信很多朋友都眼红很久了, 隔壁ios系统对高斯模糊早就大范围使用了, 咱们Android却丝毫不为所动, 于是就只能靠广大开发者咯. 这是目前市面上性能最高的方案, 也不知道最初是哪位大神 ...
- 车载网络技术详解 —— 车载网络系统基础(✨您绝不可错过的呕心力作✨)
一.车载网络系统概述 1.线束连接方式对比 传统线束连接方式 -- 点对点连接 特点: 布线复杂,占用空间大,从而限制功能的拓展 故障率增加,降低汽车的可靠性,故障率增高且排查难度加大 大量的数据传输 ...
最新文章
- linux命令2--cd和pwd
- 2021年春季学期-信号与系统-第十次作业参考答案-第二小题
- java 显式锁_Java 实现一个自己的显式锁Lock(有超时功能)
- matlab 级联cic,Matlab中CIC滤波器的应用
- 学python需要英语基础吗-学python需要英语基础吗
- priority_queue
- Homebrew是什么?怎么关闭自动更新?
- 第十章:禁丹药,禁符纸
- epub 阅读器_全球与中国EPUB阅读器市场深度调研分析报告
- java12 - 7 排序的案例
- 对LuaJIT制作的游戏的简单修改(转载)
- POJ刷题顺序(转载)
- Java发送短信验证码
- 2023我的秋招之路(1)7.21NJ银行金融科技岗提前批笔试
- 腾讯云技术认证考试综述 腾讯云技术认证题库
- matlab矩阵左右翻转例子
- Model-Agnostic Meta-Learning (MAML) 理解
- LTE网络-EPC(分组核心网)
- iOS 图标适配官网
- UVM-TLM机制解读