背景
内容点赞业务在得物社区中是一个非常高频的业务场景,功能本身复杂度不高,但是业务场景多、QPS高、而且由于社区的用户体量,整体点赞的数据量非常大。其中最核心、对响应性能要求最高的主要是“用户是否点赞内容”和“内容点赞数”场景。
在得物社区中凡是有内容消费的场景,都会有上面两个点赞场景的处理,所以整体点赞业务的QPS在社区都是非常高的。当我们在刷各种Feed流时,每一次下滑,都需要对数十篇内容进行登录用户是否点赞状态的判断。作为基础业务,内容点赞业务的高性能响应,对上游内容场景的消费体验有极大的影响。
本文对得物社区的点赞业务如何做到高性能响应以及历史上在缓存使用上关于高性能、稳定性、低成本上的优化探索过程进行讲述,希望能给读者带来一些收获。
演进探索
v1.0版本
功能需求
社区各种Feed流及内容详情页“登录用户是否已点赞内容” “内容被赞总数” “内容最新点赞用户列表”几个场景消费展示。
实现方案
点赞业务整体的高性能是基于Redis+MySQL架构。MySQL做数据存储和查询支持,Redis撑起业务的高性能响应。在1.0版本中,服务架构还是单体PHP服务,技术方案上将动态下所有的点赞用户查询出来放到PHP数组里,然后序列化为Json字符串以Key/Value的方式存储到Redis中,当用户浏览内容时,取出缓存数据,反序列化Json为PHP数组,然后通过in_array和count方法判断是否已点赞及内容点赞数。在缓存的维护上,则是每一次有新用户点赞或取消赞则直接清除Redis。
缓存结构如下:
cId => '[uid1,uid2,uid3...]'
流程图如下:

主要问题
这个版本的方案存

本文详细介绍了得物社区点赞业务从v1.0到v4.0版本的缓存优化历程,包括Redis+MySQL架构、缓存击穿问题、集合结构优化、大Key处理和Hash表结构的应用,旨在提升服务性能和降低资源消耗。经过优化,Redis查询量、接口平均响应时间和DB查询量显著下降,缓存存储空间也大幅减少。
最低0.47元/天 解锁文章
955

被折叠的 条评论
为什么被折叠?



