首页 > 其他分享 >微服务系统中点赞功能的解决方案

微服务系统中点赞功能的解决方案

时间:2025-01-09 22:04:50浏览次数:3  
标签:功能 中点 解决方案 MYSQL 业务 用户 点赞 数据

一、点赞功能概述

    点赞功能在几乎所有的涉及社交、电商等的项目中都是必不可少的功能,为了方便我们在不同的项目的不同业务中对点赞功能进行集成,应当尽量让点赞功能的实现与其他的模块解耦,这样在后续我们需要使用时,只需要将这个设计好的微服务模块放入到项目中使用即可,也就是要具备可迁移性,除此之外,一个通用的点赞功能还应当具备良好的处理高并发读写请求的能力。

        ​​​​​

        实现点赞功能,储存点赞数据,我们首先可以考虑使用MYSQL进行实现。

二、MYSQL+MQ实现点赞功能

        要实现完整可用的点赞功能,比如同一条信息用户不能重复点赞,或者是每条数据按照点赞数降序排序等功能,我们需要对两部分数据进行存储以便后续使用,一部分存储到用户点赞记录表中,表中存储好每一条点赞记录,每当用户点赞成功就存储一条数据到该表中,当用户取消了点赞就将该条记录从表中删除,以便后续判断当前用户是否对某条业务数据进行过点赞操作,为了实现这一功能,防止某个用户对同一条业务数据重复点赞,表中应当包含用户id、业务数据id、业务类型等字段,通过这几个字段我们就可以通过该表中的每一条数据判断出“谁”对“什么”进行过了点赞的操作;另一部分存储点赞数表,也就是对应的每条业务数据的总点赞数如何,方便前端对页面信息进行渲染展示,而点赞数是与业务数据进行关联的,因此我们可以选择为需要添加点赞功能的业务数据中添加一个点赞数的字段,所有涉及点赞数的业务只需要对该字段进行操作即可,也就是说,点赞数是由具体的业务方保存,当这一字段需要变化时,我们需要通知业务方对总点赞数进行更新,由于点赞功能使用广泛,涉及到的业务方的类型很多 ,我们选可以选取使用MQ低耦合的实现通知功能,提前在各个微服务中设置好监听器,每当点赞或取消点赞后,点赞数发生变化,我们就发送MQ通知到交换机上,交换机会根据需求将消息转发到对应的队列中供不同的微服务消费消息,更新数据。

整体业务流程如图:

        由于用户点赞的每条记录都存储在点赞微服务中,因此点赞微服务还需要对外暴露出一个Feign的接口,供其他微服务调用,以判断某用户是否对某条业务数据已经进行过点赞操作,用户id我们可以从ThreadLocal中获取,因此只需要设置参数需要查询的业务数据的id,接收到后到用户点赞表中进行查询即可。

三、使用Redis进行优化

        上述的操作已经基本上可以借助MYSQL和MQ实现我们需要的点赞功能,但是使用MYSQL的局限也很明显,那就是MYSQL对于高并发的处理能力很难满足点赞功能的需求,更不要说在上述的实现过程中,一次点赞业务包含多次数据库读写操作 ,在加上点赞业务可能会在短时间内访问量激增,此时数据库的压力就会非常大。

        点赞业务既有高并发读操作,也有高并发写操作,我们可以分别对这两部分操作进行优化。对于并发读的优化,既然我们选用的是MYSQL,那么我们首先需要考虑的就是对SQL的优化,除此之外,我们还可以通过添加缓存的方式,减少对数据库的查询,也能很好的改善系统在高并发环境下的性能,要添加缓存,我们首选的就是使用Redis。而处理并发写请求时,我们除了优化SQL外还可以考虑将同步写改为异步写,以及将多次写请求合并到一起进行提交等操作,上述这两种优化操作的基础是用户对于点赞功能的准确性要求并不像其他业务那么高,点赞数据的延迟刷新对于用户来说完全是可以接受的。

结合上面两部分优化思路,最终我们的点赞业务流程变成了这样:

        要在Redis中缓存用户的点赞数据,我们可以使用Set这种数据结构进行存储,我们可以选择使用业务数据id作为key,以用户id作为value,这样就可以记录下每一条业务数据都被哪些用户点过赞,同时因为Set中的数据不允许重复,当同一个用户向同一个业务中插入第二条数据时就会插入失败,这也满足了我们的业务需求。

        而对点赞数量的缓存,我们可以考虑从Hash和ZSet中挑选,主要是根据是否存在根据点赞数进行排序的业务进行选择,如果没有可以选用占用存储空间小一些的Hash进行存储,如果有就可以考虑使用ZSet,将点赞数存储到其score字段中,这样ZSet就会根据点赞数自动进行排序,非常的方便。

四、总结

        我们最终选择的点赞方案是,当有点赞数据需要存储时,直接使用Redis缓存进行记录,不再使用MYSQL对这部分数据进行存储;而点赞数的信息因为与业务数据关联,仍然需要使用到MYSQL,在数据变动时先修改Redis中的数据,最终再编写一个定时任务,每隔一段时间发送消息到MQ中,将最新的点赞数从Redis缓存同步到数据库中,就可以实现我们所需的点赞功能。

        

标签:功能,中点,解决方案,MYSQL,业务,用户,点赞,数据
From: https://blog.csdn.net/m0_61811956/article/details/144972893

相关文章

  • Python代码实现了对股票数据的读取、筛选、分析和可视化功能
    #-*-coding:utf-8-*-"""SpyderEditorThisisatemporaryscriptfile."""#读取股票数据importpandasaspdimportmatplotlib.pyplotasplt#读取数据data=pd.read_excel('D:/第3组-数据.xlsx')#切片取2024-01-02至2024-12-20......
  • python 代码主要实现了两个功能:分析参数`η`和`r`不同取值对生产商在产品捆绑和解绑两
    #!/usr/bin/envpython#coding:utf-8#(1)η不同取值下最优利润的大小关系比较#In[22]:importmatplotlib.pyplotaspltimportsympyasspimportmathimportnumpyasnpfrommatplotlibimportpyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dimpo......
  • python 代码实现了对考古遗址数据的一系列分析和可视化功能
    importpandasaspdimportnumpyasnpimportmatplotlibimportmatplotlib.pyplotaspltimportseabornassnsimportfoliumfromfolium.pluginsimportHeatMapfromsklearn.clusterimportKMeansfromsklearn.preprocessingimportStandardScalerfromgeo......
  • 一站式AIGC创作平台全功能解析,提升您的工作与学习效率
    在当今快速发展的数字时代,人工智能(AI)已经成为推动创新和提高工作效率的重要工具。「银河易创」作为一个一站式AIGC创作平台,旨在帮助用户在工作和学习中显著提高效率。无论是进行AI对话、AI绘画、AI视频制作、AI音乐创作,还是快速制作PPT,都能满足您的需求,助您轻松实现创意与灵感......
  • iMessage协议推信短信推广:跨境短信的无限群发解决方案
    在全球化商业环境中,企业越来越重视如何有效地与国际客户建立联系。iMessage作为苹果生态系统中的重要组成部分,以其安全、便捷和丰富的交互体验著称。然而,传统的短信营销方式在跨境推广中面临着诸多限制,如成本高昂、覆盖范围有限等。本章将探讨如何利用iMessage协议实现跨境短信......
  • Nessus 是一款功能强大的网络漏洞扫描工具,用于检测和评估计算机网络中可能存在的安全
    DownloadTenableNessus|Tenable® Nessus 10.8.3是什么?Nessus是一款功能强大的网络漏洞扫描工具,用于检测和评估计算机网络中可能存在的安全漏洞。它由Tenable公司开发,最初是作为一个开源项目发布的,但后来转为商业产品。Nessus可以扫描计算机系统、网络设备、Web应......
  • Creo许可证常见问题及解决方案
    Creo是一款广泛应用于工程设计领域的软件,其许可证管理对于确保软件正常运行至关重要。然而,在使用Creo许可证的过程中,用户可能会遇到一些常见问题。本文将针对这些常见问题提供解决方案,帮助您快速排除故障,确保Creo软件的顺畅运行。一、常见问题许可证无法激活:在尝试激活Creo许可......
  • Kubernetes集群运维生产常见问题解析与解决方案
    前言:在Kubernetes集群的日常运维工作中,我们难免会遇到各种各样的问题。这些问题可能涉及到集群的部署、配置、监控、性能优化等多个方面。为了解决这些问题,我们需要不断地学习和积累经验。在这里,我打算收集并整理一些网友曾经提出的问题,并提供相应的解析和解决方案,之前的问题无从......
  • 扣子又出新功能,支持一键部署小程序,太强了!!
    大家好,我是R哥。作为一名程序员和技术博主,我一直关注如何使用工具提升生产力,尤其是在内容创作和应用开发领域。拿我开发一个微信小程序为例,我需要懂前端、后端、运维等全栈技术,开发流程和技术栈复杂,我还需要购买云服务器、云数据库等各种基础设施,资源耗费非常多。虽然现在有如......
  • 腾讯云AI代码助手编程挑战赛:基于腾讯混元实现智能问答与交互AI对话功能
    引言在当今人工智能迅猛发展的时代,智能问答与交互AI对话功能正逐渐渗透到各个领域,从日常生活中的语音助手到企业级的智能客服系统。腾讯云AI代码助手编程挑战赛正在火热进行中,腾讯云AI代码助手编程挑战赛作为“AI开发黑客松”系列活动的关键部分,其主题“用AI构造AI-打造......